拉一个字符串的一个成员并使其成为一个int?

时间:2014-07-03 22:08:23

标签: c++

您好我试图拉一个字符串的一个成员并将其设置为等于int。我知道你不能简单地把int等于字符串值,但我不确定如何做到这一点。

以下是无效的代码段。

void zipcode::getZipCode(){
    int part[5];

    //This is what isn't correct.
    part[1] = strzip[1];

    cout << strzip[1] << " is equal to: " << part[1] << endl;

}

我可以使用memcpy将字符串成员复制到int值吗?

有问题的字符串是:&#34; 0010101001110000110011000&#34;

我现在得到的输出是:

0等于:48

按任意键继续。 。

2 个答案:

答案 0 :(得分:1)

字符串中的每个元素都可以隐式地转换为int(basic_string包含在标准输入/输出方法中映射到ascii字符的char类型项。)因为每个字符都是从0到255的数字映射到此{{ 3}}你可以看到它是如何发挥作用的:

if('0' == 48){cout << "0 char is 48 int";}

C ++有几种转换方法。使用简单的char类型,您可以利用基本table并将其视为数字:

int resultNumber = mystring[i] - '0';

使用上述方法,您最好检查字符是否在&#39; 0&#39;范围内。到&#39; 9&#39;第一。以下是检查并在发生错误时返回-1。

int resultNumber = (mystring[i] >= '0' && mystring[i] <= '9')?mystring[i] - '0':-1;

但您也可以使用ascii table layout,因为char会隐式转换为字符串。这有一个明显的好处,不仅仅是一个简单的char。但是,将单个字符转换为字符串与前一个方法相比,有一些小的开销。

int resultNumber = stoi(mystring[i]);

如果你愿意,可以一次性输出一个完整的字符串(这不适用于你的情况,因为你希望分别检查每个字符,但是对于2位数的字符,它将起作用。)

C&#39; s stoi执行相同的操作,但需要一个char *(C样式字符串),它不会隐式使用char类型(使用&amp; mystring [i]也可以转换为char *不起作用,因为它需要空终止)。

答案 1 :(得分:0)

这是一个常见的错误。 Strings仅仅是字符数组,(基本)字符是1到127之间的数字(不包括某些特殊控制字符)。作为char的“0”由数字48表示,因此“0”实际上等于48,因为“0”是char而48是int,它们是表示相同基本数据的不同方式。

幸运的是,有一种相当简单的方法可以解决您的问题:只需将每个char转换为等效的int

cout << strzip[1] << " is equal to: " << strzip[1] - '0' << endl;

请注意,您不能在此处使用cstdlib的atoi()函数,因为它会将整个字符串转换为数字,在您的情况下会导致丢失前导零,并且可能会溢出{{1} }。