C++ C++;从文本文件中读取并将其拆分为变量
这是我正在编写的程序中的一段代码C++ C++;从文本文件中读取并将其拆分为变量,c++,file,C++,File,这是我正在编写的程序中的一段代码 //declaration of builder variables std::string name; int ability; int variability; std::vector<string> builderVector; std::ifstream buildersList("Builders.txt"); std::string outputFile = "output.txt"; std::string input; voi
//declaration of builder variables
std::string name;
int ability;
int variability;
std::vector<string> builderVector;
std::ifstream buildersList("Builders.txt");
std::string outputFile = "output.txt";
std::string input;
void readFile() //function to read Builders file
{
std::string line;
// read each line for builders
while (std::getline(buildersList, line)) {
std::string token;
std::istringstream ss(line);
// then read each element by delimiter
while (std::getline(ss, token, ':')) //spilt the variables
ss >> name >> ability >> variability;
builderVector.push_back(token);
cout << name;
}
通过使用dilimiter,它返回以下内容
70:1.20:4.90:3
到目前为止,该程序成功地读取了一个文本文件“Builders.txt”,并使用dilimiter在fulltop进行拆分,以区分每个记录,并将其存储在一个向量中。我现在要做的是将冒号分隔的每个元素分配给一个变量。因此,例如,可靠的火星车的名称70是能力,1是可变性。在我上面的代码中,我已经尝试了这一点
ss >> name >> ability >> variability;
但是当我使用cout返回一个值时,它只返回能力和变量
谢谢 您应该使用外部循环读取行,使用内部循环使用分隔符拆分行。
现在,内部循环只删除每行末尾的“.”。
尝试以下几点: while(std::getline(buildersList,line)){ line.pop_back();//删除行末尾的“.” 字符串标记; std::istringstream ss(线路); //然后用分隔符读取每个元素 int counter=0;//读取的元素数 而(std::getline(ss,token,':'){//被分到了不同的记录中 开关(计数器){//根据元素计数放入适当的值字段 案例0: 名称=令牌; 打破 案例1: 能力=stoi(令牌); 打破 案例2: 可变性=stoi(代币); 打破 违约: 打破 } 计数器+++;//递增计数器 }
cout您应该使用外部循环读取一行,使用内部循环使用分隔符拆分该行。
现在,内部循环只删除每行末尾的“.”。
尝试以下几点: while(std::getline(buildersList,line)){ line.pop_back();//删除行末尾的“.” 字符串标记; std::istringstream ss(线路); //然后用分隔符读取每个元素 int counter=0;//读取的元素数 而(std::getline(ss,token,':'){//被分到了不同的记录中 开关(计数器){//根据元素计数放入适当的值字段 案例0: 名称=令牌; 打破 案例1: 能力=stoi(令牌); 打破 案例2: 可变性=stoi(代币); 打破 违约: 打破 } 计数器+++;//递增计数器 }
你为什么在这里用
getline
阅读while(std::getline(ss,token,'.'))//分成不同的记录
,然后使用iostream在这里读取相同的值ss>>name>>ability>>可变性;
?分隔符似乎是:“
不是”。
?在读取每个标记
后,需要分配给name
、ability
或可变性
(使用std::stoi
作为整数)不要用iostream从ss
中再次读取。请提供。这是否回答了您的问题?@AMIR我已经完成了这一步。这不是我要问的,但谢谢您为什么用getline
在这里阅读(std::getline(ss,token,“.”)//分成不同的记录
,然后使用iostream在这里读取相同的值ss>>name>>ability>>可变性;
?分隔符似乎是:“
不是”。
?在读取每个标记
后,需要分配给name
、ability
或可变性
(对整数使用std::stoi
)不要使用iostream再次读取ss
。请提供。这是否回答了您的问题?@AMIR我已经完成了这一步。这不是我想要的,但谢谢
ss >> name >> ability >> variability;