如何从字符串中获取int(使用类似char数组的字符串)

时间:2017-04-25 16:26:38

标签: c++

这个小程序描述了我在更大的项目中遇到的问题:

int main()
{
    string str1="11111111";
    string str2="22222222";

    char a=str1[2];
    char *a1=&a;
    int var1= atoi(a1);

    char b=str2[2];
    char *b1=&b;
    int var2= atoi(b1);

    cout<<var1<<endl;
    cout<<var2;


    return 0;
}

为什么我要

1
21

而不是

1
2

有什么方法可以解决这个问题吗? - 感谢我试图找出两个小时的帮助

4 个答案:

答案 0 :(得分:2)

你错误地得到了两个结果(即使你的第一个结果恰好符合你的期望)。

问题是a1b1都指向一个字符,而atoi期望一个以空字符结尾的字符串。

您可以通过构造字符数组而不是复制单个字符来解决此问题:

char a1[2] = { str1[2] };   // C++ compiler supplies null terminator, you supply the size
int var1= atoi(a1);
char b1[] = { str2[2], 0 }; // You supply null terminator, C++ compiler computes the size
int var1= atoi(b1);

答案 1 :(得分:1)

使用std::stoi()std::string::substr(),特别是如果您已std::string

std::string str1="11111111";
std::string str2="22222222";

int var1= std::stoi( str1.substr( 2, 1 ) ); // third symbol, 1 symbol long

int var2= std::stoi( str2.substr( 2, 1 ) );

live example

答案 2 :(得分:0)

atoi需要一个指向以null结尾的char字符串的指针。您将指针传递给char。发生了什么是未定义的。你最好使用std :: stoi而不是atoi,因为atoi有一些谬误:What is the difference between std::atoi() and std::stoi?

答案 3 :(得分:0)

atoi想要一个指向零终止字符序列的第一个元素的指针 你传给它一个指向单个字符的指针,在你醒来时留下未定义的行为。

要获取其中一个数字的整数值,请距离'0'

int var = str1[2] - '0';