gpt4 book ai didi

c++ - 如何正确读取和解析标准输入 C++ 中的整数字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:43 27 4
gpt4 key购买 nike

正如标题所说,我正在从标准输入中读取一串整数。我正在尝试读取的数据以以下形式出现在文本文件中:

3
4
7 8 3
7 9 2
8 9 1
0 1 28
etc...

前两行始终只是单个数字(没有问题!),接下来的每一行都有 3 个数字。该文件作为标准输入重定向到我的程序 (myprogram < textfile)。

我已经尝试了很多东西,但一直无法成功做到这一点!看起来很简单,但我一直对我应该在哪里(或如何)转换为整数感到困惑。这是我最近的尝试:

int main()
{

string str, str1, str2;
int numCities;
int numRoads, x, y, z;
cin >> numCities >> numRoads;

cout << numCities << " " << numRoads << endl;
//getline(cin, str1);


while( getline(cin, str))
{
char *cstr;
cstr = new char[str.size()+1];
strcpy(cstr, str.c_str());

x = atoi(strtok(cstr, " ")); //these will be stored in an array or something
y = atoi(strtok(NULL, " ")); //but right now i just want to at least properly
z = atoi(strtok(NULL, " ")); //store the appropriate values in these variables!


}


return 0;

}

当我尝试使用 atoi 时出现段错误...

提前致谢!

最佳答案

如果您足够信任自己的输入而不关心数字是否在预期的位置有换行符,那么您可以这样做:

int main()
{
int numCities, numRoads;
if (cin >> numCities >> numRoads)
{
int x, y, z;
while (std::cin >> x >> y >> z)
{
// use the values in here...
}
if (!std::cin.eof())
std::cerr << "encountered unparsable x, y and/or z before end of file\n";
}
else
std::cerr << "unable to parse numCities and/or numRoads\n";
}

如果您认为当换行符不在预期位置时出现错误和解释会有所帮助(例如,numCities 和 numRoads 在一行,空行,x y 在一行,而 z 在下一行...)然后你可以读取特定的行并解析出值(虽然更乏味):

int main()
{
std::string line;
int numCities, numRoads;

if (!std::getline(line, std::cin))
FATAL("couldn't read line on which numCities was expected");
std::istringstream iss(line);
char unexpected;
if (iss >> numCities)
FATAL("unable to parse numCities value out of line '" << line << '\'')
if (iss.getchar())
FATAL("unparsabel trailing garbage characters after numCities value on line '" << line << '\'')

// etc. (you can factor the above kind of logic into a function...)
}

关于c++ - 如何正确读取和解析标准输入 C++ 中的整数字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11605236/

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