如何在C++中用逗号分隔字符串

how to split a string on comma in C++

本文关键字:分隔 字符串 C++      更新时间:2023-10-16

我目前有这样的代码,用户可以在其中输入一个数字,表示他们想要在数组中有多少个数字。后面跟着"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;

我认为最好的方法是让用户输入用逗号分隔的数字,然后将其拆分(iv在java中做了同样的小程序,并试图将其更改为C++以供我个人学习(,就像在java中我使用的字符串一样。split(","(我想知道C++中是否有类似的东西??

我能想到的最简单的方法是避免读取中间字符串,让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');

使用strtok。文档和示例可在此处找到

使用字符串::substr((和字符串::find((的组合。查找下一个逗号字符,然后查找从当前位置到下一个命令字符的子字符串

它不是标准的C++字符串,但Qt的QString类仍然提供了一个现成的方法QString::split(...),支持正则表达式、拆分行为选项、区分大小写等等。。。

我不久前写了一个标记器,希望它对你有用:

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

它效率不高,但可用于测试目的。