题目:
字符串与数字的互转,atoi \itoa
Code(C):
atoi
#include<stdio.h>
#include<stdlib.h>
int StrToInt(char *s);
void main()
{
char s[30];
int n;
printf("请输入一个字符串\n");
gets(s);
n = StrToInt(s);
printf("字符串%s转化为数字是%d\n",s,n);
}
int StrToInt(char *s)
{
int num = 0,i = 0,flag = 1;
if(s == NULL)
{
printf("输入的字符串指针为0\0");
exit(0);
}
if(s[0] == '\0')
{
printf("字符串为空\n");
exit(0);
}
if(s[0] == '-')
{
flag = -1;
i++;
}
else if(s[0] == '+')
{
flag = 1;
i++;
}
while(s[i] != '\0')
{
if(s[i] >= '0' && s[i] <= '9')
{
num = num*10+s[i]-'0';
i++;
}
else
{
printf("输入不合法!\n");
exit(0);
}
}
if(flag == -1)
return (-1)*num;
else
return num;
}
itoa
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void IntToStr(int n,char *s);
void reverse(char *s,int start,int end);
void main()
{
int n;
char s[12]; //对于int,12位就可以了
printf("请输入一个整数,实行整数转化为字符串\n");
scanf("%d",&n);
IntToStr(n,s);
printf("整数%d转化为字符串为%s\n",n,s);
}
void IntToStr(int n,char *s)
{
int m = abs(n),i = 1;
if(s == NULL)
exit(0);
if(n == 0) //输入为0要特殊对待
s[i++] = '0';
while(m)
{
s[i++] = m%10+'0';
m /= 10;
}
s[i] = '\0'; //字符串的结束标志
reverse(s,1,i-1); //字符串反转
if(n >= 0) //s[0]存放符号位
s[0] = ' ';
else
s[0] = '-';
}
void reverse(char *s,int start,int end)
{
char temp;
while(start < end)
{
temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}