我想制作一个将3www2as3com0
转换为www.as.com
的程序,但我在开始时遇到了麻烦;我想将字符串的第一个数字(字符3)转换为整数以使用strncpy
或strchr
等函数,因此当我打印转换的int
时,程序显示51而不是3.问题是什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
/* argv[1]--->3www2as3com0*/
char *string;
char *p;
string=argv[1];
p=string;
char cond,cond2;
cond=*p; //I want to have in cond the number 3
cond2=(int)cond; //I want to convert cond (a char) to cond2(an int)
printf("%d",cond2); //It print me 51 instead of 3
return (EXIT_SUCCESS);
}
答案 0 :(得分:3)
您的计算机显然在名为ASCII的方案中对字符串进行编码。 (我相当确定大多数现代计算机使用ASCII或超集,例如UTF-8用于char*
字符串。)
请注意可打印字符和非打印字符如何编码为数字。 51是字符'3'的编号。
ASCII的一个很好的功能是所有数字都有从'0'开始增加的代码。
这允许通过计算aDigitCharacter - '0'
来获得数字的数值。
例如:cond2 = cond - '0';
编辑:
您还应该通过确保字符位于'0'
和'9'
之间来仔细检查字符是否确实是数字;
如果要将包含多个数字的字符串转换为可能需要使用atoi
的数字。
它可以在<stdlib.h>
中找到。
答案 1 :(得分:0)
字符的整数值是数字的ASCII代码,而不是它实际代表的数字。您可以通过减去'0'
来转换。
if( c >= '0' && c <= '9' ) val = c - '0';
答案 2 :(得分:0)
看起来你正在使用的字符串永远不会有负数,所以你可以使用atoi(),从char返回整数值。如果它遇到不是数字的东西,它将获得在此之前建立的数字。