把字符串转换为数字
1.考虑字符串除最后一个都是数字,如'2''3''6''\0'
int strToInt(const char *str)
{
int temp = 0;
const char *ptr = str; //ptr保存str字符串开头
while(*str != 0)
{
temp = temp * 10 + (*str - '0');//根据ASCII码的数学关系把字符转换为数字
str++;
}
return temp;
}
2.考虑带有正负号的情况,在上个函数的基础上加判断和对应的操作
int strToInt(const char *str)
{
int temp = 0;
const char *ptr = str; //ptr保存str字符串开头
if(*str == '-' || *str == '+')//如果第一个字符是正负号。这是增加的部分
{
str++;
}
while(*str != 0)
{
temp = temp * 10 + (*str - '0');//根据ASCII码的数学关系把字符转换为数字
str++;
}
if(*ptr == '-')//如果字符串是以'-'开头,则转换成其相反数 。这是增加的部分
{
temp = -temp;
}
return temp;
3.考虑字符串有误的情况,即因为某些原因如输入手误,字符串并非除正负号和最后一个全部为数字。需要在上个函数的基础上增加判误部分
int strToInt(const char *str)
{
int temp = 0;
const char *ptr = str; //ptr保存str字符串开头
if(*str == '-' || *str == '+')//如果第一个字符是正负号。
{
str++;
}
while(*str != 0)
{
if(*str < '0' || *str > '9')//如果当前字符不是数字。这是增加的部分
{
break; //则退出循环
}
temp = temp * 10 + (*str - '0');//根据ASCII码的数学关系把字符转换为数字
str++;
}
if(*ptr == '-')//如果字符串是以'-'开头,则转换成其相反数 。
{
temp = -temp;
}
return temp;
现在这个函数就比较完整啦。
此外C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。
● atof():将字符串转换为双精度浮点型值。
● atoi():将字符串转换为整型值。
● atol():将字符串转换为长整型值。
● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
把数字转换为字符串
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。
● itoa():将整型值转换为字符串。
● ltoa():将长整型值转换为字符串。
● ultoa():将无符号长整型值转换为字符串。
● gcvt():将浮点型数转换为字符串,取四舍五入。
● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
● fcvt():指定位数为转换精度,其余同ecvt()。