将 C++ 中的文件读取到字符串数组中,不断重复最后一个单词
reading a file in c++ to an array of strings keeps repeating the last word
当我从我的程序中读取一个包含 5 个单词的 .txt 文件并将其放入一个有 20 个空格的数组时,我文件中的最后一个单词填满了我数组中的最后 16 个位置。任何想法为什么?我输入的文件最多20个字。
newArray string[20];
if (inputFile) {
while (i<20) {
inputFile >> word;
if (word.length()<2) { //gets rid of single character words
i++;
}
else{
newArray[i] = word;
cout<<newArray[i]<< " ";
}
}
inputFile.close();
}
您的问题不清楚,但我确信在您的循环中您可能仍在添加最后一个词,因为您使用 while 循环的方式。添加完单词后,您并没有跳出循环。如果你在文件末尾,你应该跳出循环,这应该可以解决你最后一个单词出现多次的问题。
更好的方法是将整个文件读入 1 个字符串,然后标记化并一次将每个单词添加到数组中。
如果这没有帮助,请提供完整的代码。我也不明白为什么你 i++ }
两次。这是错字吗?
希望对您有所帮助。
编辑:试试这个代码:
int i = 0;
string line;
ifstream myfile("names.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
arr[i] = line;
i++;
}
myfile.close();
}
您不会在
之后添加任何行
如果我错了请纠正我,但是为什么你需要一个包含 20 个字符串的数组来读入 5 个单词?下面的代码是从文件读取到数组的标准方法。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string myArray[20];
ifstream file("file.txt");
string word;
if(file.is_open())
{
int i = 0;
while(file>>word)
{
if(word.length()<2)
continue;
else
{
myArray[i] = word;
i++;
}
}
}
}
附录:编辑将读取所有单词并在没有更多文本时停止。您最初的问题是文件流在读取所有 5 个单词后没有读取任何内容,因此 word
保持不变,导致它填满数组。
当我从我的程序中读取一个包含 5 个单词的 .txt 文件并将其放入一个有 20 个空格的数组时,我文件中的最后一个单词填满了我数组中的最后 16 个位置。任何想法为什么?我输入的文件最多20个字。
newArray string[20];
if (inputFile) {
while (i<20) {
inputFile >> word;
if (word.length()<2) { //gets rid of single character words
i++;
}
else{
newArray[i] = word;
cout<<newArray[i]<< " ";
}
}
inputFile.close();
}
您的问题不清楚,但我确信在您的循环中您可能仍在添加最后一个词,因为您使用 while 循环的方式。添加完单词后,您并没有跳出循环。如果你在文件末尾,你应该跳出循环,这应该可以解决你最后一个单词出现多次的问题。
更好的方法是将整个文件读入 1 个字符串,然后标记化并一次将每个单词添加到数组中。
如果这没有帮助,请提供完整的代码。我也不明白为什么你 i++ }
两次。这是错字吗?
希望对您有所帮助。
编辑:试试这个代码:
int i = 0;
string line;
ifstream myfile("names.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
arr[i] = line;
i++;
}
myfile.close();
}
您不会在
之后添加任何行如果我错了请纠正我,但是为什么你需要一个包含 20 个字符串的数组来读入 5 个单词?下面的代码是从文件读取到数组的标准方法。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string myArray[20];
ifstream file("file.txt");
string word;
if(file.is_open())
{
int i = 0;
while(file>>word)
{
if(word.length()<2)
continue;
else
{
myArray[i] = word;
i++;
}
}
}
}
附录:编辑将读取所有单词并在没有更多文本时停止。您最初的问题是文件流在读取所有 5 个单词后没有读取任何内容,因此 word
保持不变,导致它填满数组。