gpt4 book ai didi

c++ - 使用文件提取运算符读取是 int 还是 string

转载 作者:行者123 更新时间:2023-11-28 02:20:17 25 4
gpt4 key购买 nike

我正在从一个文件中读取数据,并且我正在使用提取运算符来获取第一个值。问题是我需要知道该值是整数还是字符串,以便我可以将其放入适当的变量中。

所以我的问题是我可以尝试将它放入一个 int 中,如果失败,它会把它放入一个字符串中吗?或者事先检查它是一个整数还是一个字符串?

如果需要,我可以提供代码/伪代码。

文件示例:

   3 rows  3 columns all @ go
5 columns 6 rows go
5 rows triangular go
alphabetical 3 rows 3 columns go
all ! 4 rows 4 columns outer go
alphabetical triangular outer 5 rows go

最佳答案

有很多方法可以做到这一点,一种是简单地将其作为字符串读取,然后尝试在您自己的代码中将其解析为整数。如果解析成功,那么你得到一个整数,否则你得到一个字符串。

有几种解析字符串的方法,包括(但不限于):

  • 使用std::istringstream>>> 运算符,并检查流标志
  • std::stoi
  • 以编程方式检查所有字符是否都是数字,使用普通十进制算法进行转换。

使用 std::stoi 的简单示例:

std::string input;
if (std::getline(std::cin, input))
{
try
{
std::size_t pos;
int n = std::stoi(input, &pos);

// Input begins with a number, but may contain other data as well
if (pos < input.length())
{
// Not all input was a number, contains some non-digit
// characters as position `pos`
}
else
{
// Input was a number
}
}
catch (std::invalid_argument&)
{
// Input is not a number, treat it as a string
}
catch (std::out_of_range&)
{
// Input is a number, but it's to big and overflows
}
}

如果你不想使用异常,那么旧的 C 函数 std::strtol可以改用:

std::string input;
if (std::getline(std::cin, input))
{
char* end = nullptr;
long n = std::strtol(input.c_str(), &end, 10);

if (n == LONG_MAX && errno == ERANGE)
{
// Input contains a number, but it's to big and owerflows
}
else if (end == input.c_str())
{
// Input not a number, treat as string
}
else if (end == input.c_str() + input.length())
{
// The input is a number
}
else
{
// Input begins with a number, but also contains some
// non-number characters
}
}

关于c++ - 使用文件提取运算符读取是 int 还是 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32792790/

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