-1

これはコードの短い断片であり、指定された文字列にスペースがあるかどうかをテストします

#include<string>
#include<iostream>
#include<cctype>
using namespace std;
//performs string operations
void string_get()
{
    string text;
    cout<<" enter string "<<endl;
    getline(cin,text);
    string::size_type position=text.find(' ');
    if(position!=string::npos)
    {
        if(text.find(' ',position+1)!=string::npos)
        {
            cout<<" contains at least two spaces "<<endl;

        }
        else
        {
            cout<<" contains less then two spaces "<<endl;

        }
            }


    else
    {

        cout<<" no spaces "<<endl;
    }

    }

int main()
{

    string_get();



    return 0;
}

このコードを実行して文字列を入力すると、正常に動作しますが、そのような質問があります。つまり、このコードにバグがあると表示され、修正するように求められますが、どのバグがここにあるのかわかりませんでしたか?文字列かもしれませんNULLですか?または文字列にスペースが含まれていませんか?どちらの場合を考慮する必要がありますか?

4

2 に答える 2

3

質問をした人は、posへの議論findは範囲内にある必要があると思ったかもしれません[0, length)。ただし、これは標準の21.3.6.3/2からは当てはまりません。

戻り値:関数がxposのそのような値を決定できる場合はxpos。それ以外の場合は、nposを返します。

于 2012-04-17T08:20:55.663 に答える
0

マイナーなバグがあります。利用可能な入力がない可能性があります。の戻り値をチェックしていませんgetline(cin,text);。これは起こりそうにありません。たとえば、入力リダイレクトと空の入力ファイルが必要になります。

于 2012-10-05T12:29:18.003 に答える