Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从文本文件中读取并将其拆分为变量_C++_File - Fatal编程技术网

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;