在do ... while中检查字符串中的字符

时间:2016-11-09 10:08:52

标签: c++

do
{
    e=0;
    cout << "Enter input of base " << base << ": ";
    cin >> input;
    for ( i=0; i<input.length(); i++)
    {
        if (input[i]=='A')
            value=10;
        else if (input[i]=='B')
            value=11;
        else if (input[i]=='C')
            value=12;
        else if (input[i]=='D')
            value=13;
        else if (input[i]=='E')
            value=14;
        else if (input[i]=='F')
            value=15;
        else
            value=input[i];

        if(value>=base)
        {
            cout << "Invalid input data for your input base!!!" << endl << endl;
            e=1;
        }

    }
}while (e==1);

如果用户键中的用户键为101101,而基数为2,则输出无效6次。错误是什么?

我尝试使用npos,find(),但他们没有工作!

2 个答案:

答案 0 :(得分:2)

下面:

value=input[i];

您似乎假设字符'0'的值为0,字符'1'的值为1(对于其他数字也是如此)。您的假设对于系统使用的字符编码是错误的。实际上,'0'不可能由值0表示,因为它是为指定字符串结尾的空终止符保留的。

  

谢谢,但接下来该怎么做?

从另一个字符中减去一个字符的值会给出这些字符的表示之间的距离(从中减去字符会给你0)。数字字符保证是顺序的(0紧接在1之前紧接在2 ......之前)。鉴于这些公理,很容易证明从一个字符中减去'0'的值可以得到你正在寻找的价值。

答案 1 :(得分:1)

替换:

else
    value=input[i];

使用:

else
    value=input[i] - '0';

由于:

'0'= 0x30 = 48