我怎么能读字符串和整数,在同一行从文本文件
How can i read string and integer, on same line from a text file?
我有这个例子,
在我的。txt文件中我有" Jorge Saraiva 1321312 "
my .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;
有了这个,我只有名字("豪尔赫"),我不知道我怎么能告诉编译器当名称/字符串结束。
您试图将字符串(第二个)放入数字中,这是导致意外输出的原因。将它定向到字符串应该可以解决这个问题。你可以丢弃这个字符串,没关系。
string line, name, dummy;
int number;
while(getline(ifi, line)){
istringstream iss1(line);
iss1 >> name;
iss1 >> dummy;
iss1 >> number;
}
我可以为你的问题找到一个解决方案。如果您希望有多个名称(无论大小),然后在前面有一个数字,您可以利用isdigit函数。
当从文件中读取时,可以在while循环中添加如下内容:
String temp;
is >> name;
while (is){
is >> temp;
if(isdigit(temp[0])){
int number = atoi(temp.c_str()); }
else {
name += " " + temp;
}
}
这样你可以有多个大小的名字。
我是在手机上写的,所以比较困难,但是你可以明白我在说什么。然而,不要忘记包括图书馆。
大多数情况下,在处理csv文件时,您的数据用分号或其他字符分隔。如果你没有,那么你必须做更高级的解析。您可以使用regexp:
#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]);
}
您可以选择继续提取为整数,除非成功
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;
}
试试这个代码
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;
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何使代码打印文本文件中的第一行?
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 将字符串存储到文件下一行的变量中
- 为什么这个.c文件只有一行"../xx/xx.c"?
- 比较两个没有一行共同点的大文件
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 到达分隔符时跳到文本文件的下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 从文本文件中随机选取一行
- 在获取从文件到矢量的每一行之后,数字将被更改或销毁
- 从文件中的一行读取特定数据-C++
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 为什么这一行不输出我的文本文件?
- 从文件读取并在一行中写入 cout
- 如何有效地读取C 中的最后一行文件
- 将一行文件读入对象中的两个变量