0

我目前有这段代码,用户可以在其中输入一个数字来表示他们想要在数组中包含多少个数字。然后是“12345”,但是在写完它大约一秒钟后,我意识到这只有在他们输入数字 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;

我认为最好的方法是让用户输入用逗号分隔的数字,然后将它们拆分(我在 java 中做了同样的小 porgram 并尝试将其更改为 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

I wrote a tokenizer time ago, hope it works for you:

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;
}

it is not efficient, but works for testing purpose.

于 2013-02-26T12:46:26.907 回答