如何使用getline在c ++中用逗号*和* <space>分隔?

时间:2017-01-25 00:37:05

标签: c++

鸡肉,出售,60

微波炉,通缉,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);
....

4 个答案:

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

Live demo

然后,您可以将上述逻辑包装在自定义重载的>>运算符中:

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

Live demo

答案 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);
}