Jar*_*Loo 1 c++ arrays string token delimiter
我有一个文件以下列格式存储数据(这只是一个小样本):
AD,Andorra,AN,AD,AND,20.00,Andorra la Vella,Europe,Euro,EUR,67627.00
AE,United Arab Emirates,AE,AE,ARE,784.00,Abu Dhabi,Middle East,UAE Dirham,AED,2407460.00
AF,Afghanistan,AF,AF,AFG,4.00,Kabul,Asia,Afghani,AFA,26813057.00
AG,Antigua and Barbuda,AC,AG,ATG,28.00,Saint John's,Central America and the Caribbean,East Caribbean Dollar,XCD,66970.00
AI,Anguilla,AV,AI,AIA,660.00,The Valley,Central America and the Caribbean,East Caribbean Dollar,XCD,12132.00
Run Code Online (Sandbox Code Playgroud)
我想存储每行的第二个字段,以便我的数组只包含国家名称,如下所示:
string countryArray[] = {"Andorra,United Arab Emirates", "Afghanistan", "Antigua and Barbuda", "Anguilla"}
Run Code Online (Sandbox Code Playgroud)
但每次运行我的代码时,都会发生分段错误.这是我的代码:
countryArray[256];
if (myfile)
{
while (getline(myfile,line))
{
std::string s = line;
std::string delimiter = ",";
size_t pos = 0;
std::string token;
short loop=0;
while ((pos = s.find(delimiter)) != std::string::npos)
{
token = s.substr(0, pos);
s.erase(0, pos + delimiter.length());
if (loop < 2)
{
loop++;
}
else
{
loop+=11;
countryArray[count] = token;
count++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
考虑使用std::istringstream.就像是:
while(getline(myfile, line))
{
std::istringstream iss(line);
std::string data;
getline(iss, data, ','); // get first column into data
getline(iss, data, ','); // get second column into data
countryArray[count] = data;
++count;
}
Run Code Online (Sandbox Code Playgroud)
什么std::istringstream是允许您std::string像常规文件一样对待输入流.
您可以使用getline(iss, data, ',')从流中读取的内容直到下一个逗号','并将其存储在中std::string data.
编辑:
还要考虑使用std::vector而不是数组.
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |