C++ 在c+;中读取.txt文件行的一部分+;
我有一个C++ 在c+;中读取.txt文件行的一部分+;,c++,C++,我有一个.txt文件,如下所示: Peter He is a boy. Mary She is a girl. Tom It is a cat. ... 我想使用c++读取文件,将名称存储到字符串数组name[]中,并将描述存储到另一个字符串数组description[]中,但不带句号“.” 名称和描述用一个选项卡分隔 我该怎么做?假设您已经知道如何读取文本文件的整行,您可以使用特定的字符(我经常使用“,”来分隔文本) 例如,您可以阅读“Peter He is a bo
.txt
文件,如下所示:
Peter He is a boy.
Mary She is a girl.
Tom It is a cat.
...
我想使用c++
读取文件,将名称存储到字符串数组name[]
中,并将描述存储到另一个字符串数组description[]
中,但不带句号“.”
名称和描述用一个选项卡分隔
我该怎么做?假设您已经知道如何读取文本文件的整行,您可以使用特定的字符(我经常使用“,”来分隔文本) 例如,您可以阅读“Peter He is a boy”中的第一行。但如果您将其设置为分隔字符串,它可能看起来像“Peter,He is a boy.”。然后可以循环遍历字符串的每个字符,直到有问题的特定字符=','然后可以相应地拆分字符串 像这样的东西可能是你想要的:
#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;
}
}
}
}
#包括
#包括
#包括
int main()
{
矢量线(3);
病媒名称(3);
矢量描述(3);
第(0)行=彼得,他是个男孩;
第(1)句=玛丽,她是个女孩;
台词。at(2)=“汤姆,它是一只猫。”;
对于(int i=0;iname.at(i);
}
对于(int d=j+1;ddescriptions.at(i);
}否则{
打破
}
}
打破
}
}
}
}
编辑:此代码将查找3个空格,而不是单个字符“,”
#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;
}
}
}
}
#包括
#包括
#包括
int main()
{
矢量线(3);
病媒名称(3);
矢量描述(3);
第(0)行=彼得,他是个男孩;
第(1)句=玛丽,她是个女孩;
台词。at(2)=“汤姆,它是一只猫。”;
对于(int i=0;iname.at(i);
}
对于(int d=j+3;ddescriptions.at(i);
}否则{
打破
}
}
打破
}
}
}
}
还有一个小提示:不要因为不是你所希望的快速解决方法或者你不理解而否决一个真正有效的答案。我只知道如何阅读整行或一个单词 这是我写的:
#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;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
弦线[6153];
流鳍;
财务公开(“dict.txt”);
if(fin.fail()){
如果你还没有谷歌搜索到可能的解决方案,那就试试吧。你可以从你尝试过任何东西开始吗?在询问如何做之前?请告诉我们你尝试了什么,以便我们可以帮助你修复它。你怎么知道文本文件包含6153行?有没有任何方法可以在不添加“,”或“,”的情况下将一行分隔成两个字符串是否有任何方法可以读取一行两次,每次都将名称或描述分配到字符串数组中?类似于:fin>>name[i];getline(fin,description[i]);从理论上讲,定界可以是任何形式,甚至可以使用原始字符串中的空格集,但使用“,”更简单。@JackieCheung我更新了答案,以帮助处理原始数据。如果这被认为是您问题的充分答案,您应该通过单击答案的左边是绿色的。