C++ 在文件中查找单词

C++ 在文件中查找单词,c++,string,vector,character,argv,C++,String,Vector,Character,Argv,此函数用于构建树,读取argv[1]中名为的文件中包含的文本输入。然后,我打开文件,逐字符读取,如果有新行,如果token='\n'跟踪此行号并将其存储在向量中,以便稍后访问。接下来,它使用数字或字母符号以外的任何字符作为终止符,将其分解为一个单词序列。这就是我出错的地方。然后,我尝试将每个字符添加到字符串中,然后当标记是数字或字母符号时,将字符串推送到向量中,以便稍后访问它。我的逻辑正确吗?还有,你能帮我把每个单词放到一个向量中时的错误吗 对不起,我弄糊涂了 BinarySearchTree

此函数用于构建树,读取argv[1]中名为的文件中包含的文本输入。然后,我打开文件,逐字符读取,如果有新行,如果token='\n'跟踪此行号并将其存储在向量中,以便稍后访问。接下来,它使用数字或字母符号以外的任何字符作为终止符,将其分解为一个单词序列。这就是我出错的地方。然后,我尝试将每个字符添加到字符串中,然后当标记是数字或字母符号时,将字符串推送到向量中,以便稍后访问它。我的逻辑正确吗?还有,你能帮我把每个单词放到一个向量中时的错误吗

对不起,我弄糊涂了

BinarySearchTree buildTree (char *argv[]){

    ifstream file;
    vector<char *> V;
    int line = 0;
    vector<int> LineNumber;
    file.open(argv[1],ios::in);

    char token;
    string word[] = {};


    if (file.is_open()){
        token = file.get();//reads the next character from a stream
        if (token == '\n')
            line++;
        LineNumber.push_back(line);
        while (token!= ' ' || '0' || '1' || '2' || '3' || '4' || '5' ||'6' || '7' || '8' || '9'){
        //while character is not space, digit, or non-alphabetic character
            word += token;//adds character to string array *error here
        }
        V.push_back(word);//adds word to vector *error here
    }
}

这一行并不像你想象的那样:

while (token!= ' ' || '0' || '1' || '2' || '3' || '4' || '5' ||'6' || '7' || '8' || '9')
您必须单独比较,令牌!='0'&&token!='1' .... 但是,您可以随时利用C标准库,这就是它的用途

#include <cctype>

while (!std::isspace(token) && !std::isdigit(token))
最后,您的向量是用char*的值类型声明的,但您试图将字符串推回。将其更改为:

std::vector<std::string> V;
注意单词=。在生成下一个单词之前,需要将其清空

此外,您可能希望在将单词推入向量之前检查单词是否为空,以避免向量中出现空白条目:

if (word.size()) V.push_back(word);

while条件检查不会按照您的想法进行。谢谢!这真的很有帮助
if (file.is_open()){
    std::string input;
    while (std::getline(file, input))
    {
        for (std::size_t i = 0; i < input.size(); ++i)
        {
            token = input[i];
            if (token == '\n')
            {
                line++;
            }
            LineNumber.push_back(line);

            if (std::isalpha(token))
            {
                word += token;
            }
        }
        V.push_back(word);
        word = "";
    }
}
if (word.size()) V.push_back(word);