我格式化了如下数据:
Words 5 AnotherWord 4 SomeWord 6
它在一个文本文件中,我使用ifstream来读取它,但是如何将数字和单词分开?这个单词只包含字母,单词和数字之间会有一些空格或标签,不确定有多少。
答案 0 :(得分:19)
假设“单词”中没有任何空格(那么它实际上不是1个单词),这里有一个如何读取到文件末尾的示例:
std::ifstream file("file.txt");
std::string str;
int i;
while(file >> str >> i)
std::cout << str << ' ' << i << std::endl;
答案 1 :(得分:4)
&gt;&gt;对std::string重写了运算符,并使用空格作为分隔符
所以
ifstream f("file.txt");
string str;
int i;
while ( !f.eof() )
{
f >> str;
f >> i;
// do work
}
答案 2 :(得分:3)
sscanf对此有好处:
#include <cstdio>
#include <cstdlib>
int main ()
{
char sentence []="Words 5";
char str [100];
int i;
sscanf (sentence,"%s %*s %d",str,&i);
printf ("%s -> %d\n",str,i);
return EXIT_SUCCESS;
}
答案 3 :(得分:2)
实际上非常简单,您可以找到参考here
如果您使用制表符作为分隔符,则可以使用getline代替并将delim参数设置为'\ t'。
更长的例子是:
#include <vector>
#include <fstream>
#include <string>
struct Line {
string text;
int number;
};
int main(){
std::ifstream is("myfile.txt");
std::vector<Line> lines;
while (is){
Line line;
std::getline(is, line.text, '\t');
is >> line.number;
if (is){
lines.push_back(line);
}
}
for (std::size_type i = 0 ; i < lines.size() ; ++i){
std::cout << "Line " << i << " text: \"" << lines[i].text
<< "\", number: " << lines[i].number << std::endl;
}
}