在c ++中逐个字符从字符串传递到int时不精确

Posted

技术标签:

【中文标题】在c ++中逐个字符从字符串传递到int时不精确【英文标题】:Imprecision when passing from string to int character by character in c++ 【发布时间】:2020-05-20 18:57:28 【问题描述】:

首先,我从geline(cin, s) 中获取字符串,输入格式为:100 49。而且我不能用普通的 cin 来处理它,因为我需要知道 geline(cin, s) 在哪里使 s 为空,所以这意味着是一个空行,我应该停止程序。 从字符串 '99'(或任何其他低于 100 的数字)传递到 int 99 时没有问题。但是当我尝试一个大于 99 的数字时,它给出了(数字 - 1)。我还发现,数字低于 1000 时会发生这种情况,但从 1000 到 10000 没关系,但我测试了大于 10^4 的数字,它又给了(数字 - 1)一次。 这是我转换字符串的代码

//Search how many nums are in the string wer are passing until an space or new line

int nums = 0;

for(int j = i; j < s.size(); j++)
  if(s[j] == ' ' || s[j] == '\n') break;
  nums++;
 

 //pass to the variable time the string character by character
 int time = 0;

 while(nums--)
    time += (s[i] - '0') * (pow(10, nums));
    i++;

我想知道我的电脑是否有错误或我遗漏了什么。

【问题讨论】:

题外话,但我敢打赌,无论您要完成什么,都无需使用诸如pow之类的浮点函数。 请编辑您的问题以包含minimal reproducible example,您缺少大部分代码 @PaulMcKenzie pow 可能是这种奇怪行为的原因? 查找atoi()。 "pow 可能是这种奇怪行为的原因?"很可能不是,至少不是直接的。但是使用 2 个循环和 pow() 是低效且复杂的方式。一个循环就足够了。 【参考方案1】:

首先,我从geline(cin, s) 中获取字符串,输入格式为:100 49。

那么最简单的解决方案就是使用std::istringstream:

int i1 = 0, i2 = 0;
std::istringstream( s ) >> i1 >> i2;

【讨论】:

以上是关于在c ++中逐个字符从字符串传递到int时不精确的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串从swift传递到javascript

如何使用 C++/CLI Wrapper 将变量参数从托管传递到非托管?

从 C++/CLI 应用程序将 STL 字符串传递给 C++ DLL

从初识到进阶,硬核解说C语言< 进阶篇 1 > 深度剖析数据在内存中的存储

C语言中,如何实现从文件中读取数据(大量的数据)后,在循环体中使用,每次传递3个值到数组。

转到 [] 字符串到 C 字符**