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}
Run Code Online (Sandbox Code Playgroud)在处理之前从字符串中删除不需要的字符,例如$和#:就像:上面的处理方式一样.
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];
Run Code Online (Sandbox Code Playgroud)
如果输入总是具有固定数量的令牌,则sscanf可能是另一种简单的解决方案
std::sscanf(str, "%d:%d:%d:%d:%d:%d:%d:%d", &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8);
Run Code Online (Sandbox Code Playgroud)
我之前不得不编写类似这样的代码,并在Stack Overflow上发现了一个问题,该问题用于使用定界符分割字符串。这是原始问题:link。
您可以将其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, ':');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57995 次 |
| 最近记录: |