字符串操作并忽略字符串的一部分

时间:2015-05-12 09:03:29

标签: c++ string file-io

我使用C ++

从文本文件中输入以下内容
  

command1 5 #Create 5 box
  长度12
  insertText这是一个盒子

如何在输入中读取而忽略#sign之后的任何内容?

例如输出应该没有#Create 5 box

command1  5
length    12
insertText THIS IS A BOX

编辑:

我尝试了以下内容:

while(getline(myfile, line))
{
    istringstream readLine(line);
    getline(readLine, command, ' ');
    getline(readLine, input, '\0');
}

......但它似乎无法发挥作用。

4 个答案:

答案 0 :(得分:1)

在你的函数中逐个检查每个字符,添加以下代码:(伪代码)

if(currChar == #){
    while(currChar != '\n'){
        getNextChar();// you arent saving it so youre ignoring it
    }
 }else{
    Char c = getNextChar();
    //now you can add this character to your output string

答案 1 :(得分:1)

外部while(getline(istringsteam很好,但之后你想要将一个以空格分隔的单词读入命令,然后可能是一个或多个以空格分隔的输入:之类的东西

std::string command, input;
std::vector<std::string> inputs;
if (readLine >> command && command[0] != '#')
{
    while (readLine >> input && input[0] != '#')
        inputs.push_back(input);
    // process command and inputs...
}

使用>>getline更容易解析readLine,因为如果他们没有获得至少一个有效字符,则会设置流失败状态,从而{{1}索引安全并干净地删除空行或没有输入的命令。

答案 2 :(得分:1)

您可以像这样简单地使用std::getline()

int main()
{
    std::ifstream ifs("file.txt");

    std::string line;
    while(std::getline(ifs, line))
    {
        std::istringstream iss(line);

        if(std::getline(iss, line, '#')) // only read up to '#'
        {
            // use line here
            std::cout << line << '\n';
        }
    }
}

<强>输出:

command1 5 
length 12
insertText THIS IS A BOX

答案 3 :(得分:0)

例如,

。您可以使用ignore(inputSize,“#”)或使用getline http://www.cplusplus.com/reference/istream/istream/ignore/ http://www.cplusplus.com/reference/istream/istream/getline/