Как читать форматированные данные на С++?
У меня есть форматированные данные вроде:
Words 5
AnotherWord 4
SomeWord 6
Это в текстовом файле, и я использую ifstream для его чтения, но как я могу отделить число и слово? Слово будет состоять только из алфавитов, и между словом и числом будут определенные пробелы или вкладки, а не сколько.
Ответы
Ответ 1
Предполагая, что в "слове" не будет пробелов (тогда это не будет фактически 1 слово), вот пример того, как читать до конца файла:
std::ifstream file("file.txt");
std::string str;
int i;
while(file >> str >> i)
std::cout << str << ' ' << i << std::endl;
Ответ 2
Оператор → переопределяется для std::string и использует пробел как разделитель
так
ifstream f("file.txt");
string str;
int i;
while ( !f.eof() )
{
f >> str;
f >> i;
// do work
}
Ответ 3
На самом деле это очень просто, вы можете найти ссылку здесь
Если вы используете вкладки как разделители, вы можете использовать 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;
}
}
Ответ 4
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;
}