验证字符串是否为全部数字

时间:2013-10-20 21:13:59

标签: c++ string

嗨我无法验证这个字符串是否为全小数,即使我输入9999它仍然告诉我我的if语句是假的。我认为这是一个错字,但我不知道在哪里。

cout<<"Enter a very large number"<<endl;
cin>>In1;                            //inputs a string
for(int i=0; 0<In1.length();i++){    //the loop that goes thru each index
    if (!(isdigit(In1[i]))){         //validates each index
        //tells the user to try again
        cout<<"You did not enter a valid input, please try again"<<endl;
        In1="";
        cin>>In1;
        i=0;//starts the loop over if reached
    }
}

我一直收到“您没有输入有效输入,请再试一次”,无论我输入的是对还是错。

4 个答案:

答案 0 :(得分:5)

for(int i=0; 0<In1.length();i++){

看看你做了什么?改为

for(int i=0; i<In1.length();i++)

在循环条件中,您需要将iIn1.length()进行比较。

答案 1 :(得分:3)

您可能想要更改

0<In1.length()

i<In1.length()

答案 2 :(得分:3)

使用

#include<algorithm>

if ( std::find_not_if( in1.begin(), in1.end(), isdigit ) != in1.end() ){ ...

可能已经阻止了这一不幸事件,而且意图也很清楚。双_not /!=稍微混淆但仍然。

有许多便利算法,取代了简单的for语句的常见用法。其中大多数都在表格

do_this( where_to_start, where_to_end, do_this_operation )

这些功能通常没什么特别或戏剧性的,它们将操作应用于起始序列中的每个元素。

您有findcountcopygenerate提及一些。他们的目的是澄清你的陈述的意图。您可以在http://en.cppreference.com/w/cpp/algorithm

找到完整列表

答案 3 :(得分:2)

您几乎肯定会发现,随着时间的推移,您会更加擅长将不同的代码部分分离到它们各自提供的功能中。使调试和以后的修改变得相当容易。

正如长颈鹿队长所指出的那样,这也使得代码的意图更加清晰 - 只能让代码更容易阅读。更快。

我没有使用std :: find_not_if,而是选择使用您选择的方法(基于重要的事情是知道如何获得正确答案的假设,如反对简单地提供正确答案 - 好吧,我不知道find_not_if的存在:咧嘴笑:)你会看到我已经将它放入它自己的功能中,我从main调用它。该函数也只执行单个任务 - 检查字符串的有效性。任何尝试提示用户输入此文本,在出现错误时重新提示并最终对正确的输入采取操作的行为是调用isValidNumericalString的代码的唯一责任 - 没有理由你不能扔这些功能融入了自己的功能,而不是拥有一个庞大的主体。

#include <iostream>

using namespace std;

// returns true if all characters in string are numerical (0-9)
bool isValidNumericalString(string inputString)
{
    int i, n = inputString.length();
    for (i=0; i<n; i++)
        if ( !isdigit(inputString[i]) )
            return false;
    return true;
}

int main()
{
    string In1;

    cout << "Enter a very large number (digits 0-9 only. 10e1 is unacceptable): ";
    cin >> In1;

    while (!isValidNumericalString(In1))
    {
        cout << "You did not enter a valid input, please try again :p" << endl;
        cout << "Enter a very large number (digits 0-9 only. 10e1 is unacceptable): ";
        cin >> In1;
    }

    cout << "Congratulations - '" << In1 << "' is a valid string representation of a number" << endl;

    return 0;
}