您好我试图拉一个字符串的一个成员并将其设置为等于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
按任意键继续。 。
答案 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} }。