【问题标题】:convert string to integer in c++在 C++ 中将字符串转换为整数
【发布时间】:2011-04-21 00:19:56
【问题描述】:

你好 我知道有人问了很多次,但我没有找到具体问题的答案。

我只想转换只包含十进制数字的字符串:

例如 256 可以,但 256a 不行。

不检查字符串可以吗?

谢谢

【问题讨论】:

  • 您的主题行说“将整数转换为字符串”,但您的问题似乎暗示了字符串到整数的转换...您要做什么?!
  • 这篇文章含糊不清,需要更多标点符号。你能用一个例子解释一下你的意思吗?

标签: c++ string integer


【解决方案1】:

我能想到的使错误检查成为可选的最简单方法是:

char *endptr;
int x = strtol(str, &endptr, 0);
int error = (*endptr != '\0');

【讨论】:

  • 我不是 atoi 的粉丝,因为它无法区分完全无效的字符串和有效并转换为 0 的字符串之间的区别
【解决方案2】:

在 C++ 方式中,使用stringstream:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    stringstream sstr;
    int a = -1;

    sstr << 256 << 'a';
    sstr >> a;

    if (sstr.failbit)
    {
        cout << "Either no character was extracted, or the character can't represent a proper value." << endl;
    }
    if (sstr.badbit)
    {
        cout << "Error on stream.\n";
    }

    cout << "Extracted number " << a << endl;

    return 0;
}

【讨论】:

  • 但是如果字符串不是整数呢? a 的值是多少?
  • @Jean-FrançoisFabre:您可以通过验证 sstr.rdstate() 返回的状态或检查各个状态值来检查流条件。我已经用后一种选择更新了我的答案。
【解决方案3】:

使用 c++ 风格的另一种方式:我们检查位数以了解字符串是否有效:

#include <iostream>
#include <sstream>
#include <string>
#include <cmath>

int main(int argc,char* argv[]) {

    std::string a("256");

    std::istringstream buffer(a);
    int number;
    buffer >> number; // OK conversion is done !
    // Let's now check if the string was valid !
    // Quick way to compute number of digits
    size_t num_of_digits = (size_t)floor( log10( abs( number ) ) ) + 1;
    if (num_of_digits!=a.length()) {
        std::cout << "Not a valid string !" << std::endl;
    }
    else {
        std::cout << "Valid conversion to " << number  << std::endl;
    }

}

【讨论】:

  • “0”、“0001”、“-5”失败。
猜你喜欢
  • 2021-08-15
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 2020-05-26
相关资源
最近更新 更多