编程:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。

思路:先判定字符串第一位是否为符号,“+”或没有则符号为正(1),“-”则符号为负(-1)。然后每一位的数值是ASCII值减去48。计算公式为:123=12*10+3=(1*10+2)*10+3.

#include <stdio.h>
int atoi_(char *p)
{ int a = 0;
int b = 0;
int i = 0;
int j = 0;
int sign = 1;
if (*p =='+')
p = p+1;//判定首位是否为正号。指针指到符号后面。
if (*p == '-')//判定首位是否是负号。
{
p = p+1;
sign = -1;//符号标识符为-1.
}
while (*(p+i) >= 48 && *(p+i) <= 57)
{
i++; //计算一共多少位数字。
}
for (j = 0;j < i;j++)
{
b = *(p+j)-48;
a = a*10+b;
}
a = a*sign;//计算出来的数字乘以前面判定的符号。
return a;
}
int main(void)//主函数。
{ char str1[10] = "";
int a;
printf("请输入字符串str1 = ");
gets(str1);
a = atoi_(str1);//调用atoi_函数。
printf("the number is %d.\n",a);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-18
下面是用C++语言写的,加上头文件
#include <string>
main()
{
string a;
cout<<"请输入一个数字:";
cin>>a; //这里不检查数字字符串的正确性,假定是输入的字符串可以转成数字的
bool zhengshu=true;//假定是正数
if (a[0]=='-')
{
zhengshu=false;
}
int Num=0;
unsigned int i;
for (i=(zhengshu?0:1);i<(a.length());i++)//如果是负数,就从第2位开始转换,否则从第1位开始转换
{
int j=a[i]-'0';
Num=Num*10+j;
}
if (!zhengshu)//如果是负数就取反
{
Num=-Num;
}
cout<<Num<<endl;
}
在VS2010上通过编译,可以正确运行本回答被网友采纳
第2个回答  2011-05-28
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

int main()
{
char a[13];
long b=0,x=0;
int i,t;
printf("please input a string:\n");
gets(a);
t=strlen(a);
if(a[0]!='-')
{
for(i=0;i<t;i++)
{
x=pow(10,t-i-1);
b=b+(a[i]-48)*x;
}
}
else
{
for(i=1;i<t;i++)
{
x=pow(10,t-i-1);
b=b+(a[i]-48)*x;
}
b=-b;
}
printf("\nThe result is %ld\n",b);
system("pause");
return(0);
}

没有考虑意外情况,但输入数字字符串是正确的
第3个回答  2011-05-29
符号要分开检测
字符串的话 int a = '1234' - '0';
如果遇到负号那么 int a = - ( '1234' - '0' )
第4个回答  2011-05-28
不知道要用什么语言写呐?C? 这我不会,,,不过可以给你个思路哦!

比如要把 字符串 '1' 转为整型,,可以先得到它的ascii码,然后再减30就是1了
相似回答