C++中两个字符串的比较
Comparison of two strings in C++
当我尝试比较C++中的两个字符串(一个从文件中读入,另一个分配了一个值)时,我得到一个不正确的输出:
ifstream pgmFile;
pgmFile.open(fileName);
string temp;
string comp = "P5";
for(int i = 0; i < 2; i++)
{
pgmFile >> noskipws >> temp;
cout << temp;
}
if(temp == comp)
{}
else
cout << "File does not contain 'P5'. Please provide the correct type of file." << endl;
理论上,这应该返回"true",表明这两个字符串是正确的。 temp 的输出 = "P5",所以我不明白为什么它每次都击中我的 else 案例。 任何帮助都非常感谢!
发生这种情况很可能是因为您将值读入temp
两次(在第一个 for 循环中)。第二次读取空字符串时(例如,状态应为 EOF)。打印空字符串时,看不到它。然后,您将"与"P5"进行比较,这两件事是不一样的。
您可以将打印语句移到"for"循环之后以查看它包含的值,这将是与"P5"进行比较的值。
希望对您有所帮助。祝你好运!
noskipws
将把空格字符('\r'、''、'\t'等)加载到字符串中。 如果您检查temp
的长度,由于末尾的空格,它可能与comp
的长度不同(如果我不得不猜测,我会说这可能是换行符)。
编辑:我掩盖了循环 - 你不需要,第二次读取可能会设置 pgmFile.bad 标志(因为如果"P5"是其中的全部内容,第一次读取会读取整个文件)。
似乎 std::string 的某些实现有一个运算符 ==(),它可以成功比较,但这不是通用的,如 std::string 引用所示。
如果在您的环境中是这种情况,则以下情况适用:
这归结为您测试的内容相同。 temp 和 comp 是不同的字符串,因此在内存中具有不同的地址。简而言之,从这个意义上说,它们是不平等的。
您需要做的是比较字符串中的字符。字符串有一个 compare() 函数来执行此操作,它将返回 -1、0 或 1,具体取决于相对字符串。
相关文章:
- 两个字符串在 c++ 中不相等
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 比较两个字符串后卡在无限循环中
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 两个字符串之间的数学运算
- sscanf() 有两个字符串参数
- 我的字符串数组一次打印出前两个字符串
- 两个 c++ 字符串上的异或
- 函数返回两个字符串的第一个常用字符
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 给定两个字符串 S 和 T.确定与 T 相差最小的 S 子字符串?
- gtest:检查字符串是否等于两个字符串之一
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 我可以在系统()中使用两个字符串吗?