微波炉,通缉,201。
这些是我的txt文件中的示例行。现在这是我的代码:
chicken
for sale
60
我的输出是:
while(getline(ss, word, ', '))
我的文件逐行成功解析,但我还需要在每个逗号后删除该空格。在逗号之后添加空格只会给我一个错误“没有匹配函数来调用'getline(...:
if(word[0]==' '){//eliminates space
word.erase(0,1);
}
解决方案:我刚刚使用了擦除功能
...
int i; /* or char i; */
d = open("test", O_WRONLY);
i = 8;
write(fd, &i, sizeof(int)); /* or 1 */
i = 4;
write(fd, &i, sizeof(int)); /* or 1 */
i = 0x61;
write(fd, &i, sizeof(int)); /* or 1 */
close(d);
....
答案 0 :(得分:1)
尝试这样的事情:
std::string line;
std::string tok;
while (std::getline(data, line))
{
std::istringstream iss(line);
while (std::getline(iss >> std::ws, tok, ',')) {
tok.erase(tok.find_last_not_of(" \t\r\n") + 1);
std::cout << tok << std::endl;
}
}
然后,您可以将上述逻辑包装在自定义重载的>>
运算符中:
class token : public std::string {};
std::istream& operator>>(std::istream &in, token &out)
{
out.clear();
if (std::getline(in >> std::ws, out, ','))
out.erase(out.find_last_not_of(" \t\r\n") + 1);
return in;
}
std::string line;
token tok;
while (std::getline(data, line))
{
std::istringstream iss(line);
while (iss >> tok) {
std::cout << tok << std::endl;
}
}
答案 1 :(得分:0)
getline只解析单个参数
如果要解析多个分隔符,可以使用boost库。
std::string delimiters("|,:-;");
std::vector<std::string> parts;
boost::split(parts, inputString, boost::is_any_of(delimiters));
for(int i = 0; i<parts.size();i++ ) {
std::cout <<parts[i] << " ";
}
答案 2 :(得分:0)
您可以使用std::ws
删除每个部分的任何前导空格:
while(getline(ss >> std::ws, word, ','))
答案 3 :(得分:0)
解决方案:我刚刚使用了擦除功能
if(word[0]==' '){//eliminates space
word.erase(0,1);
}