如何比较字符串与const char *?
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string cmd;
while(strcmp(cmd.c_str(),"exit")==0 && strcmp(cmd.c_str(),"\exit")==0)
{
cin>>cmd;
cout<<cmd;
}
return 0;
}
我被卡住了。如何比较字符串与const char *?
固定几个小错误后,该作品在我的机器上:
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
int main()
{
std::string cmd;
while(std::strcmp(cmd.c_str(),"exit")!=0
&& std::strcmp(cmd.c_str(),"\\exit")!=0)
{
std::cin>>cmd;
std::cout<<cmd << '\n';
}
return 0;
}
不过,我不知道为什么要使用std::strcmp()
可言。正如您刚刚发现的那样,它不像std::string
类那样容易使用。这
while(cmd!="exit" && cmd!="\\exit")
工作一样好,更容易理解,从而更容易得到正确。
OP可能希望在比较之前将输入字符串转换为小写字母。这允许用户输入“退出”以及“退出”。研究条款是:'std :: transform'和'tolower'。 – 2010-05-28 19:35:02
Unixy上也有'strcasecmp'(也许是Windows)系统,它忽略了大小写。 – Joe 2016-05-02 08:12:51
strcmp
当它们相等时返回0。所以我想你想!= 0
当然strcmp
不会返回0,因为它不能等于两者。
此外,它看起来像你在你的字符串的开始处有一个反斜杠,你应该用双反斜杠来回避。
,因为你正在测试检查CMD字符串等"exit"
和"\\exit"
你而该条件将永远不会计算到true
。一个字符串不能同时等于两个值。
可以使用!=
或==
运算符将std::string
实例与字符串字面值直接进行比较。这使得你的比较更清晰。
注意\e
不是有效的转义字符,你需要,如果你的意思是一个文字\\
的\
一倍。
while(cmd == "exit" && cmd == "\\exit")
显然cmd
不能等于在同一时间两个不同的字符串,想必你的意思!=
。
此外,请考虑std::getline(std::cin, cmd)
是否比std::cin >> cmd;
更合适。无论哪种情况,您都应该检查读取操作是否成功,否则如果流关闭或进入失败状态,您可能会以无限循环结束。
就我个人而言,如果您想要按照您的代码回显exit命令,我会采用类似的方式。
#include <string>
#include <iostream>
#include <ostream>
int main()
{
std::string cmd;
while (std::getline(std::cin, cmd))
{
std::cout << cmd << std::endl;
if (cmd == "exit" || cmd == "\\exit")
break;
}
return 0;
}
这是正确的答案。 – 2015-09-03 00:13:45
你的问题是条件。
你可能希望做退出循环,当用户进入退出,所以你应该使用:
while(strcmp(cmd.c_str(),"exit")!=0 && strcmp(cmd.c_str(),"\exit")!=0)
只是几件事情要记住,我重申一些的,是值得重复的建议而(1)次。
您正在使用C++,它是面向对象的,即它最好将数据和处理它的函数结合在一起。在这种情况下,使用字符串类而不是strcmp提供的字符串比较选项。
你的程序有一个逻辑错误,它会编译,但我恐怕那不是你想要的。如果(a == x & & a == y)这将始终是错误的,因为除非x = y,否则x和y都不能等于x,y,在您的情况下显然x!= y。
干杯, 帕
最好是直接将代码中的问题 – 2010-05-28 18:55:02
@布赖恩贴:我去这样做。 – sbi 2010-05-28 18:55:44
另外,如果使用cmd.compare(“exit”)而不是strcmp(cms,c_str(),“exit”),它会更干净== 0 您正在编写C++代码。为什么不利用它呢? – Vagrant 2010-05-28 19:04:33