> a >> b) { // process pair (a,b) } 这是我一直在看的代码,但我遇到了一个问题,因为我的字符串之间没有空格,-6ren">
gpt4 book ai didi

C++ ifstream,使用 ";"加载问题

转载 作者:行者123 更新时间:2023-11-28 05:57:52 26 4
gpt4 key购买 nike

int a, b;
while (infile >> a >> b)
{
// process pair (a,b)
}

这是我一直在看的代码,但我遇到了一个问题,因为我的字符串之间没有空格,它们之间有“;”
我的代码:

void load(string filename){ // [LOAD]
string line;
ifstream myfile(filename);
string thename;
string thenumber;

if (myfile.is_open())
{
while (myfile >> thename >> thenumber)
{
cout << thename << thenumber << endl;

//map_name.insert(make_pair(thename,thenumber));

}
myfile.close();
}
else cout << "Unable to open file";
}

[Inside the txt.file]

123;peter
789;oskar
456;jon

我现在得到的是“thename”为 123;peter 和“thenumber”为 789;oskar。我希望“thename”为 peter,“thenumber”为 123,这样我就可以将它正确地插入回我的 map 中,如何?

最佳答案

infile >> a 从infile 中读取符合条件的类型为a。在您的情况下,a 是 int,因此 '>>' 期望找到一个 int。在您的代码中 myfile >> thename >> thenumber 都是字符串类型,因此他们期望您的文件中的字符串类型。问题是字符串包含';'所以变量名将占用所有行,直到找到\n(新行)。

在你的代码中

std::string thename, thenumber;
字符定界符(';');//它总是'-'是吗?
std::getline(std::cin, thename, delimeter);
std::getline(std::cin, thenumber);

数字也将是字符串类型。将您的 thenumber 转换为 int:

std::istringstream ss(thenumber);
int i;
ss >> i;
if (ss.fail())
{
// Error
}
else
{
std::cout << "The integer value is: " << i;
}
return 0;

关于C++ ifstream,使用 ";"加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com