我想读取一个文本文件并将其内容输入到数组中。然后我想在命令行中显示数组的内容。
我的想法是使用以下方式打开文件:
inFile.open("pigData.txt")
然后使用以下方法获取文件的内容:
inFile >> myarray [size]
然后使用for循环显示内容。
我的问题是我试图读取的文件包含单词,我不知道如何将整个单词作为数组中的元素。另外,让我们说单词用空格分隔,因此:
你好再见
可以在文件中找到。我想把整行“hello goodbye”读成并行数组的元素。我怎么能这样做?
答案 0 :(得分:4)
应该非常简单。
std::vector<std::string> file_contents;
std::string line;
while ( std::getline(inFile,line) )
file_contents.push_back(line);
std::vector<std::string>::iterator it = file_contents.begin();
for(; it!=file_contents.end() ; ++it)
std::cout << *it << "\n";
修改:
你对“hello goodbye”作为元素零和元素一的评论对我来说有点混乱。上面的代码片段将读取文件的每一行,并将其作为单个条目存储在数组'file_contents'中。如果你想阅读它并将它分成稍微不同的空格。
答案 1 :(得分:3)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
// This will store each word (separated by a space)
vector<string> words;
// Temporary variable
string buff;
// Reads the data
fstream inFile("words.txt");
while(!inFile.eof())
{
inFile>>buff;
words.push_back(buff);
}
inFile.close();
// Display
for(size_t i=0;i<words.size();++i) cout<<words[i]<<" ";
return 0;
}
答案 2 :(得分:3)
对于上下文,您可以提供指向your previous question的链接,关于存储两个不同语言的单词列表。在那里,我提供了一个将文本文件的内容读入数组的示例:
const int MaxWords = 100;
std::string piglatin[MaxWords];
int numWords = 0;
std::ifstream input("piglatin.txt");
std::string line;
while (std::getline(input, line) && numWords < MaxWords) {
piglatin[numWords] = line;
++numWords;
}
if (numWords == MaxWords) {
std::cerr << "Too many words" << std::endl;
}
您不能拥有 一个 并行数组。对于要平行的东西,必须至少有两个。对于并行的单词数组,您可以使用如下声明:
std::string piglatin[MaxWords];
std::string english[MaxWords];
然后,您有两个选项可以从文件中填充数组:
读取整行,然后根据第一个空格的位置将该行分为两个单词:
while (std::getline(input, line) && numWords < MaxWords) {
std::string::size_type space = line.find(' ');
if (space == std::string::npos)
std::cerr << "Only one word" << std::endl;
piglatin[numWords] = line.substr(0, space);
english[numWords] = line.substr(space + 1);
++numWords;
}
一次读一个单词,假设每行都有两个单词。 >>
运算符会自动一次读取一个单词。 (如果每一行都没有正好两个单词,那么你就会遇到问题。试试看出来是怎么回事。真的。当你知道原因是什么的时候获得一个bug的经验当你不知道原因是什么时,将来会帮助你。)
while (input && numWords < MaxWords) {
input >> piglatin[numWords];
input >> english[numWords];
++numWords;
}
现在,如果你真的有一个带有两个元素的一个数组,那么你需要定义另一个数据结构,因为一个数组在每个元素中只能有一个“东西” 。定义一次可以容纳两个字符串的东西:
struct word_pair {
std::string piglatin;
std::string english;
};
然后你将只有一个数组:
word_pair words[MaxWords];
你可以这样填写:
while (std::getline(input, line) && numWords < MaxWords) {
std::string::size_type space = line.find(' ');
if (space == std::string::npos)
std::cerr << "Only one word" << std::endl;
words[numWords].piglatin = line.substr(0, space);
words[numWords].english = line.substr(space + 1);
++numWords;
}
注意代码如何索引到words
数组中以查找下一个word_pair
对象,然后使用.
运算符转到piglatin
或{{必要时1}}字段。
答案 3 :(得分:1)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main ()
{
vector<string> fileLines;
string line;
ifstream inFile("pigData.txt");
if ( inFile.is_open() ) {
while ( !inFile.eof() ) {
getline(inFile, line);
fileLines.push_back(line);
}
inFile.close();
} else {
cerr << "Error opening file" << endl;
exit(1);
}
for (int i=0; i<fileLines.size(); ++i) {
cout << fileLines[i] << "\n";
}
cout << endl;
return 0;
}