我是C ++的初学者,我试图通过使用带有strtok_s的标记将文本放入文本文件的向量中。
我只能将一个文本推回并显示在向量中,我确信在编码中存在一些问题。
以下是代码:
std::vector<char> myVector;
ifstream myReadFile;
myReadFile.open("E:/C++/Projects/Textfile project/Textfile project/class_data.txt", ios_base::in);
char output[100];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
}
}
myReadFile.close();
char* token = NULL;
char* context = NULL;
char delims[] = " ,\t\n";
token = strtok_s(output, delims, &context);
while (token != NULL)
{
if (token != NULL)
{
myVector.push_back(token);
token = strtok_s(NULL, delims, &context);
}
}
for (int i = 0; i < myVector.size(); i++) {
cout << myVector[i] << endl;
}
我试图从文本文件中取出文本,将其分成单独的部分并将它们放入字符向量中。
谁能告诉我我做了什么错误?抱歉没有专业编码,我是一名学习C ++的高中生。
编辑后的代码:
std::vector<std::string> myVector;
ifstream myReadFile;
myReadFile.open("E:/C++/Projects/Textfile project/Textfile project/class_data.txt", ios_base::in);
char output[100];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
char* token = NULL;
char* context = NULL;
char delims[] = " ,\t\n";
token = strtok_s(output, delims, &context);
while (token != NULL)
{
myVector.push_back(token);
token = strtok_s(NULL, delims, &context);
}
}
}
myReadFile.close();
for (int i = 0; i < myVector.size(); i++) {
cout << myVector[i] << endl;
}
答案 0 :(得分:2)
您需要定义std::vector<char> myVector;
std::string
类型的对象向量。
std::vector<std::string> myVector;
本声明
myVector.push_back(token);
无效,因为您尝试按指针而不是字符。
while循环中的if语句
while (token != NULL)
{
if (token != NULL)
{
myVector.push_back(token);
token = strtok_s(NULL, delims, &context);
}
}
是superflouos,可以删除
while (token != NULL)
{
myVector.push_back(token);
token = strtok_s(NULL, delims, &context);
}
还要考虑到这个循环
while (!myReadFile.eof()) {
myReadFile >> output;
}
始终覆盖对象输出。您应该将此循环与将输出分割为标记的循环结合起来。否则,您正在处理文件的最后一条记录。