读取特定行中的值(可变数量的值)并将它们存储在数组中
Posted
技术标签:
【中文标题】读取特定行中的值(可变数量的值)并将它们存储在数组中【英文标题】:Read values in a specific line (variable number of values) and store them in an array 【发布时间】:2015-03-08 20:18:10 【问题描述】:我有一个 .txt 文件,其中包含我必须使用的几千行浮点值。我不知道每条特定行有多少个值。我想将一行中的所有值存储到一个数组中。
这就是我目前所拥有的全部:
string line;
int row = 0;
ifstream file_input (input.c_str());
while ( getline(file_input, line) )
row++;
if (row == 8) // if I want to read the 8th line
cout << line;
这段代码打印了第 8 行的所有内容,一共是大量的值。我想将所有这些值存储到一个数组中。 我该怎么做?
【问题讨论】:
【参考方案1】:您可以使用std::stringstream
(或std::istringstream
)从行中读取那些float
s,并将它们推送到std::vector
。
std::vector<float> vec;
std::string line;
std::ifstream file_input (input);
int row = 0;
while (getline(file_input, line))
++row;
if (row == 8) // if I want to read the 8th line
cout << line;
std::istringstream iss(line);
float value; // auxiliary variable to which you extract float from stringstream
while(iss >> value) // yields true if extraction succeeded
vec.push_back(value); // and pushes value into the vector
break;
或查看this post了解更专业的方法。
【讨论】:
【参考方案2】:既然你已经把文件的一行变成了一个字符串,你可以把这个字符串转换成一个char的vector,做成一个char* em> 指向该向量并将 char* 作为第一个参数传递给以下函数:
char * strtok (char * str, const char * 分隔符);
在您的情况下,第二个参数将是一个空格“”。然后可以将接收到的 char 指针转换为浮点数,并将每个令牌存储在数组中!
int nums(char sentence[ ]) //function to find the number of words in a line
int counted = 0; // result
// state:
const char* it = sentence;
int inword = 0;
do switch(*it)
case '\0':
case ' ': case '\t': case '\n': case '\r':
if (inword) inword = 0; counted++;
break;
default: inword = 1;
while(*it++);
return counted;
int main()
ifstream file_input (input.c_str());
int row=0;
while ( getline(file_input, abc) )
vector<char> writable(abc.begin(), abc.end());
vector<char> buf(abc.begin(), abc.end());
writable.push_back('\0');
buf.push_back('\0');
char *line=&writable[0];
char *safe=&buf[0];
char* s= "123.00";
float array[100];
char *p;
int i=0;
p= strtok (line, " ");
array[i]=atof(p);
cout<<" "<<array[i];
i++;
while (i<nums(safe))
p = strtok (NULL, " "); //returns a pointer to the token
array[i]=atof(p);
cout<<" "<<array[i];
i++;
return 0;
不幸的是循环:while(p!=NULL) 无法正常工作并导致分段错误,因此我不得不预先计算字数在使用另一个向量的行中,因为 strtok() 修改了作为 char* 传递给它的字符串。
【讨论】:
以上是关于读取特定行中的值(可变数量的值)并将它们存储在数组中的主要内容,如果未能解决你的问题,请参考以下文章