我创建了一个文本文件love.txt
:
i love you
you love me
如何将它们存储到单独的数组中,即line1
和line2
,然后在控制台中显示它们?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string line1[30];
string line2[30];
ifstream myfile("love.txt");
int a = 0;
int b = 0;
if(!myfile)
{
cout<<"Error opening output file"<<endl;
system("pause");
return -1;
}
while(!myfile.eof())
{
getline(myfile,line1[a],' ');
cout<<"1."<<line1[a]<<"\n";
getline(myfile,line2[b],' ');
cout<<"2."<<line2[b]<<"\n";
}
}
答案 0 :(得分:5)
尝试在getline()
个函数中将最后一个参数指定为'\ n':
getline(myfile, line1[a], '\n');
而不是
getline(myfile, line1[a], ' ');
答案 1 :(得分:2)
您可以将字符串视为字符数组,因此您只需要一个字符串数组:
const size_t SIZE = 30;
string line[SIZE]; // creates SIZE empty strings
size_t i=0;
while(!myfile.eof() && i < SIZE) {
getline(myfile,line[i]); // read the next line into the next string
++i;
}
for (i=0; i < SIZE; ++i) {
if (!line[i].empty()) { // print only if there is something in the current line
cout << i << ". " << line[i];
}
}
你可以维护一个计数器来查看你存储了多少行(而不是检查空行) - 这样你也可以正确地打印空行:
const size_t SIZE = 30;
string line[SIZE]; // creates SIZE empty strings
size_t i=0;
while(!myfile.eof() && i < SIZE) {
getline(myfile,line[i]); // read the next line into the next string
++i;
}
size_t numLines = i;
for (i=0; i < numLines; ++i) {
cout << i << ". " << line[i]; // no need to test for empty lines any more
}
注意:您最多只能存储SIZE
行。如果您需要更多,则必须在代码中增加SIZE
。稍后您将了解std::vector<>
,它允许您根据需要动态增大大小(因此您无需跟踪存储的数量)。
注意:使用SIZE
之类的常量只允许您在一个地方更改大小
注意:您应该在eof()
之上添加对输入流中的错误的检查:如果读取失败而不是到达文件的末尾:
while (myfile && ...) {
// ...
}
此处myfile
转换为布尔值,表示是否可以使用它(true
)或不使用false
)
<强>更新强>:
我刚刚意识到你的意思是:你想要将输入读作一系列单词(用空格分隔),但是将它们显示为行。在这种情况下,您将需要数组数组来存储每一行
string line[SIZE1][SIZE2];
其中SIZE1
是您可以存储的最大行数,SIZE2
是每行可以存储的最大字数
填写此矩阵会更复杂:您需要逐行读取输入,然后分隔行内的单词:
string tmp; // temporary string to store the line-as-string
getline(myfile, tmp);
stringstream ss(tmp); // convert the line to an input stream to be able to extract
// the words
size_t j=0; // the current word index
while (ss) {
ss >> line[i][j]; // here i is as above: the current line index
++j;
}
输出:
for (i=0; i < numLines; ++i) {
cout << i << ". ";
for (size_t j=0; j < SIZE2; ++j) {
if (!line[i][j].empty()) {
cout << line[i][j] << " ";
}
}
}
答案 2 :(得分:1)
这个怎么样..。
vector <string> v;
string line;
ifstream fin("love.txt");
while(getline(fin,line)){
v.push_back(line);
}