比较字符数组中的字符与strcmp

时间:2010-02-07 06:10:29

标签: c++ compare chars

我已经将一个xml文件读入char []并尝试将该数组中的每个元素与某些字符进行比较,例如“<”和“>”。 char数组“test”只是一个元素的数组,包含要比较的字符(我必须像这样做,否则strcmp方法会给我一个关于将char转换为cons char *的错误)。然而,有些事情是错的,我无法弄清楚。这是我得到的:
  <被比作:< strcmp值:44

知道发生了什么事吗?

char test[1];   
for (int i=0; i<amountRead; ++i)
{
    test[0] = str[i];
    if( strcmp(test, "<") == 0)
        cout<<"They are equal"<<endl;
    else
    {
        cout<<test[0]<< " is being compare to: "<<str[i]<<" strcmp value= "<<strcmp(test, "<") <<endl;
    }

}

3 个答案:

答案 0 :(得分:4)

strcmp()期望它的两个参数都是以空字符结尾的字符串,而不是简单的字符。如果要比较字符的相等性,则不需要调用函数,只需比较字符:

if (test[0] == '<') ...

答案 1 :(得分:1)

你需要0终止你的测试字符串。

char test[2];   
for (int i=0; i<amountRead; ++i)
{
    test[0] = str[i];
    test[1] = '\0'; //you could do this before the loop instead.
    ...

但是如果你总是打算一次比较一个字符,那么根本不需要临时缓冲区。你可以这样做

for (int i=0; i<amountRead; ++i)
{
    if (str[i] == "<")
       cout<<"They are equal"<<endl;
    else
    {
        cout << str[i] << " is being compare to: <" << endl;
    }
}

答案 2 :(得分:1)

strcmp希望两个字符串都以0结尾。

如果您有非0终止字符串,请使用strncmp

if( strncmp(test, "<", 1) == 0 )

由您来确保两个字符串的长度至少为N个字符(其中N是第3个参数的值)。 strncmp是您心理工具包中的一个很好的功能。