我有以下数据库:
Dependencies
我正在尝试使用compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
根据文本文件使C ++输出成员的第一个中间名和姓氏。一个人如何才能完成这个?这是我的代码
101884622 Johnson,Jack,Michael 239483
441314978 Meyers,Sally,Elaine 019383
684736222 Smallwood,Jason,Joseph 293812
387240551 Ward,Richard,Charles 472041
273639944 Vapson,Michelle,Regina 112039
654230472 Wilson,Donald,Anthony 528763
736459533 Utzig,Jacob,William 614524
687130851 Brown,Betty,Mary 079813
编译器没有显示错误。该程序没有显示任何内容。
答案 0 :(得分:2)
提取operator>>
使用空格作为读取的分隔符,因此它使用您当前的实现将整个第一个,中间名和最后一个名称读入memberLName
。您需要做的是使用std::getline
分隔使用逗号读取名称,可能类似于:
while(infile >> socialSN && getline(infile, memberLName,',') &&
getline(infile, memberMName,',') &&
infile >> memberFName && infile >> memberID)
{
cout << setprecision(0) << fixed;
cout << memberFName << " " << memberMName << " " << memberLName << endl;
}
答案 1 :(得分:1)
根据这个答案:
https://stackoverflow.com/a/10376445/210971
istream对待&#34;白色空间&#34;作为分隔符。它使用语言环境 告诉它什么字符是白色空间。反过来,一个语言环境包括一个 ctype facet,用于对字符类型进行分类。这样的方面可以看起来 像这样的东西:
#include <locale>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>
class my_ctype : public
std::ctype<char>
{
mask my_table[table_size];
public:
my_ctype(size_t refs = 0)
: std::ctype<char>(&my_table[0], false, refs)
{
std::copy_n(classic_table(), table_size, my_table);
my_table[','] = (mask)space;
}
};
现在您的程序将如下所示:
int main() {
double socialSN = 0;
string memberFName = "";
string memberMName = "";
string memberLName = "";
double memberID = 0;
ifstream infile;
infile.open ("salary_database2.txt");
if(!infile) {
cout << "Error: File not found or corrupt. "<< endl; return 1;
}
std::locale x(std::locale::classic(), new my_ctype);
infile.imbue(x);
while(infile >> socialSN >> memberLName >> memberMName >> memberFName >> memberID) {
cout << setprecision(0) << fixed;
cout << memberFName << " " << memberMName << " " << memberLName << endl;
}
return 0;
}
但使用getline看起来更干净,更少混淆。