C语言字符转数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言字符转数字相关的知识,希望对你有一定的参考价值。
编写一个函数,将数字字符串转换为十进制整数,用主函数调用这个函数,并输出结果。
功能:数字字符串转整型int,去除高位0。
注意:不要输入超出int范围。
#include <stdio.h>#include <string.h>
int pw10(int m);//计算10次方
int str2int(char *nums);
int main()
char nums[]="0103456";
int num;
printf("原字符串:%s\\n",nums);
num=str2int(nums);
printf("转成整型后的数字为:%d\\n",num);
return 0;
int pw10(int m)//计算10次方
int i,mu=1;
if(m==0)
return 1;
for(i=0;i<m;i++)
mu= mu*10;
return mu;
int str2int(char *nums)
char *p=nums;
int len=strlen(nums),i,m=0,sum=0;
while(1)//去高位0
if(*p=='0')
p++;
else
break;
for(i=len-1;&nums[i]>=p;i--)
sum=sum+(nums[i]-'0')*pw10(m++);
return sum;
参考技术A
代码如下:
#include <stdio.h>#include <stdlib.h>
int atoi(const char *str)
int val = 0, sign = 1;
const char *p = str;
// 判断正负号
if (*p < '0' || *p > '9')
if (*p == '+')
sign = 1;
else if (*p == '-')
sign = -1;
else
return val;
p++;
while (*p != '\\0')
if (*p < '0' || *p > '9')
break;
val = val * 10 + (*p - '0');
p++;
return val * sign;
int main()
int n;
n = atoi("1234");
printf("%d\\n", n);
n = atoi("-1234");
printf("%d\\n", n);
system("pause");
return 0;
运行结果:
int fun(char s[])
int i=0,n=0;
while(s[i]!='\\0')
n=n*10+s[i]-'0';i++;
return n;
int main()
char s[80]='\\0';
scanf("%s",&s);
printf("%d",fun(s));
return 0;
//运行示例:
本回答被提问者采纳C语言 字符串转数字 急急急
比如输入 十六进制数的字符串 "3a1" 转换成对应的十进制数929
不用库函数,多谢
1052 进制转换
Description
对输入的两十六进制数(两个字符串),将其转换成十进制后再求和。要求十六进制到十进制的转换功能由函数完成。例如:输入3a1、80,由于3a1转换为十进制后为929,80转换为十进制后为128,所以和为1057。
Input
输入包括两行,每行为一个十六进制数。
Output
输出包括一行为两数之和的十进制表示。
Sample Input
3a1
80
Sample Output
1057
这是原题,数值转换部分应该在main函数之外,新定义一个函数,怎么弄请问
#include<string.h>
#include<math.h>
int tran16to10(char *s)
int i,z=0,j;
j=strlen(s);
for(i=0;i<j;i++)
if(s[i]>='A'&&s[i]<='F')
z=z+(s[i]-'A'+10)*(pow(16,j-1-i));
if(s[i]>='a'&&s[i]<='f')
z=z+(s[i]-'a'+10)*(pow(16,j-1-i));
if(s[i]>='0'&&s[i]<='9')
z=z+(s[i]-'0')*(pow(16,j-1-i));
return z;
void main()
char s1[10],s2[10];
printf("请输入两个十六进制数\n");
gets(s1);
gets(s2);
printf("%d\n",tran16to10(s1)+tran16to10(s2));
参考技术A #include <stdio.h>
unsigned long htoi(const char* szHex)
unsigned long temp;
sscanf(szHex, "%x", &temp);
return temp;
int main()
char szHex[16];
printf("Enter a hexadecimal string: \n");
scanf("%s", szHex);
printf("Convert this hex string to decimal number:\n%u\n", htoi(szHex));
追问
sscanf还没有学,没有别的办法吗
追答那就用个笨方法吧:
#include
unsigned long htoi(const char* szHex)
int i;
unsigned long n=0;
for(i=0;szHex[i];i++)
if (szHex[i]== ' ') break;
if( szHex[i]>= '0'&&szHex[i]= 'a' &&szHex[i]= 'A'&&szHex[i]<= 'F') n=n*16+szHex[i]-'A'+10;
return n;
int main()
char szHex[16];
printf("Enter a hexadecimal string: \n");
scanf("%s", szHex);
printf("Convert this hex string to decimal number:\n%u\n", htoi(szHex));
再加上用指针就可以了!你试试 参考技术C scanf和printf算库函数么
以上是关于C语言字符转数字的主要内容,如果未能解决你的问题,请参考以下文章