我对编程很新,现在我正在做一个练习,我应该使用一个循环从文件中读取25个第一个符号,其中包含25个字母的字符串(如果名称短于25)和两个数字。例如:
Whirlpool machine 324 789.99
我想它看起来应该是这样的:
ifstream info("Information.txt");
string str;
int a;
double b;
for(int i = 0; i < 25; i++)
{ // some kind of code to get first 25 symbols into a string.
}
info >> a >> b;
我似乎无法找到合适的代码来直接获得25个字符串。有什么建议吗?
答案 0 :(得分:2)
您可以将std::copy_n()
算法与流缓冲区迭代器一起使用:
std::string str;
std::copy_n(std::istreambuf_iterator<char>(info.rdbuf()),
25, std::back_inserter(str));
您可能更熟悉的方法是将get()
与for()
循环一起使用:
for (char c; str.size() != 25 && info.get(c); )
str += c;
答案 1 :(得分:2)
一种简单的方法是使用read()
来读取给定数量的字符:
int length = 25; // num of chars you want to read
str.resize(length, ' '); // reserve spaces
char* begin = &*str.begin();
info.read(begin, length); // <- read it here
答案 2 :(得分:0)
您可以将所有文件内容读入字符串列表,然后将最后两个值提取到数字变量。
int main(int argc, char* argv[])
{
ifstream info("ReadMe.txt");
list<string> str;
int a;
double b;
while(!info.eof())
{
char value[255];
info >> value;
str.push_back(value);
}
b = strtod(str.back().c_str(), 0);
str.pop_back();
a = (int)strtol(str.back().c_str(), 0, 0);
str.pop_back();
return 0;
}
答案 3 :(得分:0)
鉴于上下文,我将整行读入一个字符串,使用
std::getline
,然后提取子字符串。类似的东西:
std::string line;
while ( std::getline( info, line ) ) {
std::string header = line.substr( 0, 25 );
// and later...
std::istringstream rest( line.substr( 25 ) );
int a;
double b;
rest >> a >> b;
// ...
}
一般来说,在读取面向行的输入时,读取行,
然后使用std::istringstream
来解析它。或者,如果有的话
你可以“按原样”使用的部件(就像这里的情况一样),按原样使用它们。