| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11300 人关注过本帖
标题:关于字符型,int型与ASCII码的相互转换
只看楼主 加入收藏
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
关于字符型,int型与ASCII码的相互转换
先上代码
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(){

char N[20]={0};
int *N1;
int count=0;
int i=0;
char temp;

while((temp=getchar())!='\n'){
    N[i++]=temp;
}


for(i=0;i<20;i++){
    if(N[i]!=' '&& N[i]!=0){
        N[count]=N[i];
        count++;}
}
N1=(int *)malloc(count*sizeof(int));

for(i=0;i<count;i++){
    N1[i]=step((int)N[i]-48);      
}

for(i=0;i<count;i++){
printf("%d ",N1[i]);
}
getchar();
}

int step(int s)
{
    if( s <= 0 )
        return 0;
    if( s <= 2 )
        return s;
    return step( s - 1 ) + step( s - 2 );
}


做的是一个网上的经典的题目:上台阶,每次可以走一步或者两步,要求根据输入的总台阶数算出一共有多少种走法?
要求输入(总台阶数):    1 2 3 4 5
要求输出(可能的走法数):1 2 3 5 8
题目很简单,斐波那契数列就行,但具体实现中,发现了很多问题。
(1)
if(N[i]!=' '&& N[i]!=0); 
,这里的第二个条件是写N[i]!=0还是!='0',实践中发现calloc生成的0和字符0并不一样,这里的控制应该怎么写?
(2)
N1[i]=step((int)N[i]-48);
,step函数是int输入int输出,那如何将char型数字转换成int型?10以内可以用(int)N[i]-48来做,大于10怎么办?
代码写得丑,求轻拍,求指点
搜索更多相关主题的帖子: color 
2016-09-03 13:39
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:10 
(1)calloc申请到的是一个指针地址,字符0,通常写作‘\0’比较严谨些
与malloc的区别:
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。

(2)我的回答就在下面的代码注释。
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(){

char N[20]={0};
int *N1;
int count=0;
int i=0;
char temp;

while((temp=getchar())!='\n'){//为什么不用int【】数组?用字符读写大于9的数字怎么处理?空格怎么处理?
    N[i++]=temp;
}


for(i=0;i<20;i++){
    if(N[i]!=' '&& N[i]!=0){指针NULL,字符‘\0’数值0,你的这个if有点危险
        N[count]=N[i];
        count++;}
}
N1=(int *)malloc(count*sizeof(int));

for(i=0;i<count;i++){
    N1[i]=step((int)N[i]-48);     

}

for(i=0;i<count;i++){
printf("%d ",N1[i]);
}
getchar();
}

int step(int s)
{
    if( s < 0 )   //貌似这个判断是可以省略的
        return 0;//
    if( s <= 2 )
        return s;
    return step( s - 1 ) + step( s - 2 );
}





φ(゜▽゜*)♪
2016-09-03 14:49
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 2楼 书生牛犊
多谢回复。申请int数组也试过,那样怎么从键盘输入数据呢?getchar一次只能输入一个字符‘11’就变成了‘1’,‘1’。
现在的问题是要求从键盘输入:1 2 3 4 5 6
              打印得到输出:1 2 3 5 8 13
现在就是不知道输入输出要怎么写才合适?自己总结过可以用getchar和gets,但都是只能对输入字符串用,那输入这种数字有什么成熟的写法?
还望不吝赐教。
2016-09-03 15:24
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:10 
想问问各位,为什么n层台阶走法数为什么是n-1层和n-2层走法数之和?
2016-09-03 17:36
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 4楼 ehszt
这是个面试经典算法题,你可以在刚开始通过枚举法:
一层1种走法:1
两层2种走法:1,1; 2
三层3种走法:1,1,1; 1,2; 2,1
四层5种走法:1,1,1,1; 1,1,2; 1,2,1; 2,1,1; 2,2
五层8种走法:1,1,1,1,1; 1,1,1,2; 1,1,2,1; 1,2,1,1; 2,1,1,1; 1,2,2; 2;1;2, 2;2;1;
。。。。
发现规律:f(n)=f(n-1)+f(n-2)
没有严密证明,因为目前找到的解释都是上面这样的
2016-09-04 22:21
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 5楼 lebronze
谢谢你,知道了。
2016-09-04 23:18
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 3楼 lebronze
额……scanf()函数你没接触过吗?



φ(゜▽゜*)♪
2016-09-05 08:44
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 7楼 书生牛犊
您好,scanf我也尝试过。
但是如何使用scanf输入包含空格的字符串,如:1 2 3 4
这个我试了很久没试出来,您如果有办法还望赐教
2016-09-05 09:25
快速回复:关于字符型,int型与ASCII码的相互转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024500 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved