比较字符串字节与char c ++

时间:2018-09-24 10:40:48

标签: c++ string c++11 char compare

我要遍历一个字符串,并针对该字符串中的每个字符,将其与某个字符进行比较,例如“ M”。 main/jniLibs对我不起作用,因为字符串中字符出现的顺序很重要(例如,罗马数字MC与CM不同)。

我拥有的代码(我正在使用c ++ 11进行编译):

std::string::find

控制台错误显示:

#include <iostream>
#include <cstring>
using namespace std;


int main ()
{
  string str = ("Test Mstring");
  for (auto it = str.begin(); it < str.end(); it++) {
    if (strcmp(*it, "M") == 0) cout << "M!1!!1!" << endl;
  }
}

4 个答案:

答案 0 :(得分:2)

取消引用从std::string获得的迭代器将返回char。您的代码只需要是:

if (*it == 'M') cout << "M!1!!1!" << endl;

也:

  • 注意'M'!=“ M”。在C ++中,双引号定义了一个字符串文字,该字符串以一个空字节结尾,而单引号则定义了一个字符。

  • 除非打算刷新标准输出缓冲区,否则不要使用endl\n快很多。

  • C ++中的
  • strcmp通常是代码气味。

答案 1 :(得分:2)

字符串的元素是字符,例如'M',而不是字符串。

string str = "Test Mstring";
for (auto it = str.begin(); it < str.end(); it++) {
    if (*it == 'M') cout << "M!1!!1!" << endl;
}

string str = "Test Mstring";
for (auto ch: str) {
    if (ch == 'M') cout << "M!1!!1!" << endl;
}

答案 2 :(得分:1)

strcmp比较整个字符串,因此如果将"mex""m"进行比较,则它们不相等,并且您无法将charchar进行比较string在此函数中,因为要比较字符,可以将字符串用作数组,例如

string c = "asd";
string d = "dss";
if(c[0]==d[0] /* ... */
if(c[0]=='a') /*... */

请记住,it是字符串中char的指针,因此在取消引用时,必须与char比较

if(*it=='c') 

顺便说一句,为什么要混合使用C和C ++字符串?您像在C ++中一样使用string,但是功能strcmp来自C库

答案 3 :(得分:0)

您可以执行以下操作:

std::for_each(str.begin(), str.end(), [](char &c){ if(c == 'M') cout<< "M!1!!1!"<<endl; });

迭代器指向字符串变量中的一个char,而不必进行字符串比较