我有一个.txt
文件如下:
Peter He is a boy.
Mary She is a girl.
Tom It is a cat.
...
我想使用c++
读取文件并将名称存储到字符串name[]
的数组中,并将描述存储到另一个字符串description[]
的数组中,但不包含fullstop“。 ”
名称和说明用标签分隔。
我该怎么做?
答案 0 :(得分:0)
我只知道如何阅读整行或一个单词。
这就是我写的:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
string line[6153];
ifstream fin;
fin.open("dict.txt");
if (fin.fail()){
cout << "File input failed.\n";
exit(1);
}
else{
int i;
for (i = 0; i < 6153; i++){
getline(fin, line[i]);
}
}
fin.close();
return 0;
}
P.S。 “dict.txt”中有6153行。
答案 1 :(得分:-1)
假设您已经知道如何阅读文本文件的整行,您可以使用特定字符分隔文本(我使用&#39;,很多)。
例如,你可以阅读#34中的第一行; Peter He是个男孩。&#34;但是如果你把它设置为一个分隔的字符串,它可能看起来像这样#彼得,他是个男孩。&#34;。然后你可以循环遍历字符串的每个字符,直到问题中的特定字符=&#39;,&#39;然后你可以相应地拆分字符串。
这样的事情可能是你正在寻找的东西:
#include <string>
#include <sstream>
#include <vector>
int main()
{
vector<string> lines(3);
vector<string> names(3);
vector<string> descriptions(3);
lines.at(0) = "Peter,He is a boy.";
lines.at(1) = "Mary,She is a girl.";
lines.at(2) = "Tom,It is a cat.";
for(int i = 0; i < lines.size(); i++) {
for(int j = 0; j < lines[i].size(); j++) {
if(lines[i][j] == ',') {
for(int d = 0; d < j; d++) {
stringstream ss;
ss << lines[i][d];
ss >> names.at(i);
}
for(int d = j + 1; d < lines[i].size(); d++) {
if(lines[i][d] != '.') {
stringstream ss;
ss << lines[i][d];
ss >> descriptions.at(i);
} else {
break;
}
}
break;
}
}
}
}
编辑:此代码将查找3个空格而不是单个字符&#39;,&#39;。
#include <string>
#include <sstream>
#include <vector>
int main()
{
vector<string> lines(3);
vector<string> names(3);
vector<string> descriptions(3);
lines.at(0) = "Peter,He is a boy.";
lines.at(1) = "Mary,She is a girl.";
lines.at(2) = "Tom,It is a cat.";
for(int i = 0; i < lines.size(); i++) {
for(int j = 0; j < lines[i].size(); j++) {
if(lines[i][j] == 0x20 && lines[i][j + 1] == 0x20 && lines[i][j + 2] == 0x20) {
for(int d = 0; d < j; d++) {
stringstream ss;
ss << lines[i][d];
ss >> names.at(i);
}
for(int d = j + 3; d < lines[i].size(); d++) {
if(lines[i][d] != '.') {
stringstream ss;
ss << lines[i][d];
ss >> descriptions.at(i);
} else {
break;
}
}
break;
}
}
}
}
还有一点提示不要投票给一个实际有效的答案,因为它不是你希望的快速解决方案,或者你不理解它......