可能重复:
在 C++ 中拆分字符串
我正在尝试将带有分隔符的单个字符串对象拆分为单独的字符串,然后输出单个字符串。
例如,输入字符串是名字,姓氏-年龄-职业-电话
'-' 字符是分隔符,我只需要使用字符串类函数单独输出它们。
最好的方法是什么?我很难理解 .find 。substr 和类似的功能。
谢谢!
可能重复:
在 C++ 中拆分字符串
我正在尝试将带有分隔符的单个字符串对象拆分为单独的字符串,然后输出单个字符串。
例如,输入字符串是名字,姓氏-年龄-职业-电话
'-' 字符是分隔符,我只需要使用字符串类函数单独输出它们。
最好的方法是什么?我很难理解 .find 。substr 和类似的功能。
谢谢!
我认为字符串流getline
并使代码易于阅读:
#include <string>
#include <sstream>
#include <iostream>
std::string s = "firstname,lastname-age-occupation-telephone";
std::istringstream iss(s);
for (std::string item; std::getline(iss, item, '-'); )
{
std::cout << "Found token: " << item << std::endl;
}
这里只使用string
成员函数:
for (std::string::size_type pos, cur = 0;
(pos = s.find('-', cur)) != s.npos || cur != s.npos; cur = pos)
{
std::cout << "Found token: " << s.substr(cur, pos - cur) << std::endl;
if (pos != s.npos) ++pos; // gobble up the delimiter
}
我会做这样的事情
do
{
std::string::size_type posEnd = myString.find(delim);
//your first token is [0, posEnd). Do whatever you want with it.
//e.g. if you want to get it as a string, use
//myString.substr(0, posEnd - pos);
myString = substr(posEnd);
}while(posEnd != std::string::npos);