给定一个文本文件,就像(file.txt):
1234567A(这是标签)彼得,ABC(这是标签)23523456
1345678A(这是TAB)Michael CDE(这是标签)23246756
1299283A(这是标签)安迪(这是标签)98458388
ifstream inFile;
string s;
string id;
string name;
int phoneNo;
inFile.open("file.txt");
while (!inFile.eof()) {
getline(inFile, s, '\t');
}
如何将一行字符串提取到不同的字段中?例如,当我打印s
时,它会给出1234567A
。我尝试过在Stackoverflow中找到的一些技术,但是,我无法达到目标。
感谢。
我想问的另一件事是第三个字段(即phoneNo
)是否包含1-3个元素,
1234567A(这是TAB)彼得,ABC(这是标签)23523456(这是标签)12312312
1345678A(这是TAB)Michael CDE(这是标签)23246756
1299283A(这是TAB)Andy(这是TAB)98458388(这是标签)123123123(这是标签)123123123
如何区分phoneNo
?
答案 0 :(得分:2)
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
//...
std::ifstream inFile( "file.txt" );
std::string record;
while ( std::getline( inFile, record ) )
{
std::istringstream is( record );
std::string id;
std::string name;
int phoneNo = 0;
is >> id >> name >> phoneNo;
}
或
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
//...
std::ifstream inFile( "file.txt" );
std::string record;
while ( std::getline( inFile, record ) )
{
if ( record.find_first_not_of( " \t" ) == std::string::npos ) continue;
std::istringstream is( record );
std::string id;
std::string name;
int phoneNo = 0;
is >> id >> name >> phoneNo;
}
例如,如果字段名称由多个单词组成而不是operator >>
,则应再次使用函数std::getline
例如
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
//...
std::ifstream inFile( "file.txt" );
std::string record;
while ( std::getline( inFile, record ) )
{
if ( record.find_first_not_of( " \t" ) == std::string::npos ) continue;
std::istringstream is( record );
std::string id;
std::string name;
int phoneNo = 0;
std::getline( is, id, '\t' );
std::getline( is, name, '\t' );
is >> phoneNo;
}
如果手机的数量是可变的,您应该使用std::vector<unsigned int>
或std::vector<std::string>
并更改我按以下方式显示的功能的最后一个语句
while ( is >> phoneNo ) v.push_back( phoneNo );
其中v可以定义为例如std::vector<unsigned int>