0

私は現在、ユーザーが配列に必要な数の数を入力するこのコードを持っています。続いて「12345」が続きますが、それを書いた後約1秒で、これは2桁以上の数字の0〜9を入力した場合にのみ機能することに気付きました。

int numberOfValues;
cout << "Please enter the amount of integers you want in the array" << endl;
cin >> numberOfValues;

int valuesArray[numberOfValues];
string valuesString;

cout << "Please Enter " << numberOfValues << " numbers" << endl;
cin>>valuesString;


for(int i = 0; i < numberOfValues; i++)
{
    valuesArray[i] = valuesString[i];
}
return valuesArray;

これを行うための最良の方法は、ユーザーがコンマで区切られた数字を入力し、後でそれらを分割することだと考えています(ivは、Javaでこれと同じ小さなポーグラムを実行し、私自身の個人的な学習のためにC ++に変更しようとしています)。 java私はstring.split( "、")を使用しました。c++に似たようなものがあるかどうか疑問に思いましたか?

4

5 に答える 5

4

を使用しstrtokます。ドキュメントと例はここにあります

于 2013-02-26T12:41:06.230 に答える
4

私が考えることができる最も簡単な方法は、中間の文字列への読み取りを避け、cinに作業を任せることです。

std::vector<int> valuesArray;

int i = 0;
do {
    cin >> i;
    valuesArray.push_back(i);
} while (valuesArray.size() < numberOfValues && cin.get() == ',');

/* edit: You may need to consume a '\n', if you expect one, too: */
do {
    i = cin.get();
} while (i != '\n');
于 2013-02-26T12:52:34.550 に答える
1

string :: substr()とstring :: find()の組み合わせを使用します。次のコンマ文字を検索してから、現在の場所から次のコマンド文字までの部分文字列を検索します

于 2013-02-26T12:51:02.590 に答える
1

これは標準のC++文字列ではありませんが、それでも、QtのQStringクラスは、QString::split(...)正規表現、分割動作のオプション、大文字と小文字の区別などをサポートする、すぐに使用できるメソッドを提供します...

于 2013-02-26T12:56:55.930 に答える
0

私は少し前にトークナイザーを書きました、それがあなたのために働くことを願っています:

std::vector<std::string> tokenize(const std::string &_line,const char *_delimeter)
{
    std::vector<std::string> Tokens;

    if(_line.empty()) return Tokens;

    std::string str;

    BOOST_FOREACH(char c,_line){
        if(c==*_delimeter)
        {
            Tokens.push_back(str);
            str.clear();
            continue;
        }
        str += c;
    }

    if(!str.empty())
        Tokens.push_back(str);

    return Tokens;
}

効率的ではありませんが、テスト目的で機能します。

于 2013-02-26T12:46:26.907 に答える