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