比较两个字符时出现问题

时间:2019-05-06 01:24:22

标签: c++ parsing

我目前正在使用C ++进行整数分析,并且在比较两个字符时遇到问题。我注意到atoi()函数将允许一个具有'+''-'字符的字符串,并且将根据该字符串的第一个字符{{1 }}或'+'。我在比较时遇到了问题。 for循环只会检查第一个元素是否不是数字,如果不是数字,则会检查它是负数还是正数。

这是我的代码:

'-'

我遇到的问题是,当for (i; i < 20 && usrIpt[i] != '\0'; ++i) { if (i == 0 && isdigit((unsigned char)usrIpt[0]) == 0) { if (usrIpt[0] != '+' || usrIpt[0] != '-') { isNumber = false; break; } } else { if (isdigit((unsigned char)usrIpt[i]) == 0) { isNumber = false; break; } } } usrIpt[0]'+'时,程序没有脱离'-'有条件的if。 / p>

1 个答案:

答案 0 :(得分:1)

  

for循环只会检查第一个元素是否不是数字,

首先,无需将此检查放入for循环中。由于它始终是要测试的第一个字符,因此可以独立于任何循环进行此测试。如果测试通过,则根据是否有符号字符,从字符串的索引1或索引0开始数字检查循环。

第二,您对+-的测试是错误的。它将始终为true

给出所有这些,这是您的代码的重写:

int loopstart = 0;
if ( !isdigit(usrIpt[0]) )  // not a digit, so see if it is + or -
{
    loopstart = 1;
    if (usrIpt[0] != '-' &&  usrIpt[0] != '+')
    {
       // this is not a number, so exit
    }
}

测试完成后,您将在第一个字符或第二个字符处开始循环:

int len = strlen(usrIpt);
for (int i = loopstart; i < len; ++i )  // loopstart is either 0 or 1
{
   // now check if all digits
}