C语言将一数字字符串转化成整数(不得调用C语言提供的将字符串转化成整数的函数)

程序填空题#include<stdio.h>#include<string.h>longfun(char*str){填写程序}main(){chars[10];longn... 程序填空题
# include <stdio.h>
# include <string.h>
long fun(char *str)
{ 填写程序
}
main()
{
char s[10];
long n;
FILE *out;
char *t[]={"123","789","7102","-4356"};
printf("Enter a string:\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
out=fopen("outfile.dat","w");
for(n=0;n<4;n++)
fprintf(out,"%ld\n",fun(t[n]));
fclose(out);
}
如果是-99,结果应为-99。
展开
 我来答
j198727456
2011-01-24 · 超过11用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
下面程序测试过了没有问题:
char *p;
int i,j,l,flag;
unsigned long n = 1;
unsigned long new;
l = strlen(str);
p =&str[0];
for(i = 0;i <l;i++)
{
if(*p ='-' )
{
flag = 0;
p++;
continue;
}
for(j = 0;j < l -i -1;j++)
{
n*=10;

}
new+=(*p - 48)*n;
n = 1;
p++;
}
if(flag ==0)
{
new = 0 - new; //这里简单但很实用正数转负数
}
return new;
百度网友113faafa67c
2011-01-21 · TA获得超过1839个赞
知道小有建树答主
回答量:1200
采纳率:0%
帮助的人:933万
展开全部
字符串是不能转换成整数的,单独一个数字字符可以转换为整数。
例如:字符‘0’可以转换成整数 48
字符‘1’转换成 49
....
字符‘9’转换成 57
原理:C语言中的int类型和 char类型在 0--255值域范围内可以通用。
例如:int a;
a=65;
printf("%c",a);
输出:A
再举例:char b;
b='a';
printf("%d",b);
输出:97
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chengyi988
2011-01-20 · TA获得超过178个赞
知道答主
回答量:47
采纳率:0%
帮助的人:51.4万
展开全部
要是一点都不用库函数太复杂了,我连小数的情况都给你包括了

# include <stdio.h>
# include <string.h>
# include <math.h>
# include <stdlib.h>
double fun(char *ch)
{
double d;
double d1[50];//分别存储数据的整数与小数部分的数字
double d2[50];

int count1=0;//迭代并记录数组中的元素数
int count2=0;

double db1=0;//整数部分值
double db2=0;//小数部分值

int flag=0;//判断是整数部分还是小数部分
int len=strlen(ch);
//正数的转换
if(len>0 && ch[0]!='-')
{
for(int ix = 0 ;ix <len; ++ix)
{

if(ch[ix]!='.'&& flag==0)//整数部分
{
d1[count1]=(double)(ch[ix]-'0');
count1++;
}
if(ch[ix]=='.')
{
flag=1;
continue;
}

if(flag==1)//小数部分
{
d2[count2]=(double)(ch[ix]-'0');
count2++;

}
}
int i=0;
//整数部分
for(int j=count1-1;i<count1;i++,j--)
{
db1+=d1[i]*pow(10.0,(double)j);

}
//小数部分
for(i=0;i<count2;i++)
{
db2+=d2[i]/pow(10.0,(double)(i+1));
}
d=db1+db2;
}
//负数
if(len>0 && ch[0]=='-')
{
for(int ix=0;ix<len;ix++)
{ //如果迭代到负号则跳过
if(ch[ix]=='-')
{
continue;
}
if(ch[ix]!='.'&& flag==0)
{
d1[count1]=(double)(ch[ix]-'0');
count1++;
}
if(ch[ix]=='.')
{
flag=1;
continue;
}
if(flag==1)
{
d2[count2]=(double)(ch[ix]-'0');
count2++;
}
}
int i=0;
for(int j=count1-1;i<count1;i++,j--)
{
db1+=d1[i]*pow(10.0,(double)j);

}
for(i=0;i<count2;i++)
{
db2+=(double)d2[i]/pow(10.0,(double)(i+1));
}
d=(-1)*(db1+db2);
}
return d;
}
void main()
{
char s[7]="-100.1";
double d=fun(s);
printf("%f\n",d);
system("pause");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
calz311
2011-01-21 · TA获得超过305个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:169万
展开全部
int i=0;
long n=0;
if(*(s+i)=='-')
{
i++;
while(*(s+i)!='\0')
{
n=n*10+*(s+i)%48;
i++;
}
n=-n;
}
else
{
while(*(s+i)!='\0')
{
n=n*10+*(s+i)%48;
i++;
}
}
return n;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈宗权8d804
2011-01-20 · TA获得超过3766个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:963万
展开全部
long n=0;
while(*str>='0'&&*str<='9')
n = n * 10 + *str++ - '0';
return n;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式