我有这个例子,
在我的.txt文件中,我有“Jorge Saraiva 1321312”
我的.cpp
string line, nome;
int number;
ifstream ifi("nameOfFile.txt");
if(!ifi.is_open()){
cout << "Error opening file" << ends;
}
{
else{
while( getline(ifi,line) ){
istringstream is(line);
is >> nome;
is >> number;
}
ifi.close();
}
cout << nome << endl << number << ends;
有了这个我只有名字(&#34; Jorge&#34;),我不知道如何在名称/字符串结束时告诉编译器。
答案 0 :(得分:1)
您正在尝试将字符串(第二个)放入数字中,这是意外输出的原因。 Directing it to a string应该解决这个问题。你可以丢弃字符串,不重要。
string line, name, dummy;
int number;
while(getline(ifi, line)){
istringstream iss1(line);
iss1 >> name;
iss1 >> dummy;
iss1 >> number;
}
答案 1 :(得分:1)
我可以为您的问题找到一个解决方案。如果你想拥有多个名字(无论大小),然后在前面有一个数字,你可以利用isdigit函数。
在阅读文件的同时循环中,您可以添加以下内容:
String temp;
is >> name;
while (is){
is >> temp;
if(isdigit(temp[0])){
int number = atoi(temp.c_str()); }
else {
name += " " + temp;
}
}
这样你可以有多个大小的名字。
我在手机上写字因此更难,但你可以知道我在谈论什么。但是不要忘记包括图书馆。
答案 2 :(得分:0)
通常,在处理csv文件时,您的数据以分号或其他字符分隔。在你的情况下,你没有它,所以你必须做更高级的解析。您可以使用正则表达式:
#include <regex>
// ...
// Pattern
std::regex pattern("([^\\d]+)\\s*([\\d ]+)" );
// ...
// And instead of istringstream
std::smatch sm;
if (std::regex_match(line, sm, pattern)) {
nome = sm[1];
number = std::stoi(sm[2]);
}
答案 3 :(得分:0)
您可以选择将提取保持为整数,除非成功
int number;
string name;
istringstream record(line);
// keep trying till a number is found.
record >> number;
while (record.fail() && !record.eof()) {
record.clear();
string temp;
record >> temp;
name.append(temp);
record >> number;
}
cout << "Name: " << name << endl;
cout << "Number: " << number << endl;
完整代码:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
string line;
while (getline(cin, line)) {
int number;
string name;
istringstream record(line);
// keep trying till a number is found.
record >> number;
while (record.fail() && !record.eof()) {
record.clear();
string temp;
record >> temp;
name.append(temp);
record >> number;
}
cout << "Name: " << name << endl;
cout << "Number: " << number << endl;
}
return 0;
}
答案 4 :(得分:-1)
试试此代码
string line, firstname,lastname;
int number;
ifstream ifi("nameOfFile.txt");
if (!ifi.is_open())
{
cout << "Error opening file" << ends;
}
else
{
while (ifi>>firstname>>lastname>>number) {}
ifi.close();
}
cout << firstname <<endl<<lastname <<endl << number << ends;