c ++字符串拆分字符串?
这个问题在这里已经有了答案:
stringstream
可以完成所有这些。
拆分一个字符串并存储到int数组中:
string str = "102:330:3133:76531:451:000:12:44412";
std::replace(str.begin(), str.end(), ':', ' '); // replace ':' by ' '
vector<int> array;
stringstream ss(str);
int temp;
while (ss >> temp)
array.push_back(temp); // done! now array={102,330,3133,76531,451,000,12,44412}
在处理之前从字符串中删除不需要的字符,如$
和#
:就像上面的处理方式:
。
C中的标准方式是像其他人已经回答的那样使用strtok
。 但是strtok
不是C++
类的,也是不安全的。 C ++中的标准方式是使用std::istringstream
std::istringstream iss(str);
char c; // dummy character for the colon
int a[8];
iss >> a[0];
for (int i = 1; i < 8; i++)
iss >> c >> a[i];
如果输入总是有固定数量的令牌, sscanf
可能是另一个简单的解决方案
std::sscanf(str, "%d:%d:%d:%d:%d:%d:%d:%d", &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8);
我不得不在写这样的代码之前,发现Stack Overflow的问题是用分隔符来分割一个字符串。 这是原始问题:链接。
你可以用std::stoi
来构建矢量。
std::vector<int> split(const std::string &s, char delim) {
std::vector<int> elems;
std::stringstream ss(s);
std::string number;
while(std::getline(ss, number, delim)) {
elems.push_back(std::stoi(number));
}
return elems;
}
// use with:
const std::string numbers("102:330:3133:76531:451:000:12:44412");
std::vector<int> numbers = split(numbers, ':');
这是一个有效的ideone示例。
链接地址: http://www.djcxy.com/p/19571.html