C语言每日一题之No.5
总在想,但凡编程基础正常点,都不至于惨败到这个地步。也像大多数人毕业出来,新鲜的第一份工作,如果做得好还可以略有成就感,做得一般还有提升的空间,但至少不至于像我这样基本没基础的被鄙视得一塌糊涂,被外界持续的否定,再加上经历了一些比较深刻的事,直到你也开始觉得,你存在的意义何在?可是这又怎样呢?事实已经如此了,那就努力改善!没有假如,没有如果,没有任何人可以替你来努力。今天去看了赵星的微博,很励志。有一段话藉以共勉:人总要付出很大努力才会让别人觉得毫不费力,世上没有白挣的钱,没有白付出的辛苦,只有没下够的功夫和没坚持的勇气,而功夫下在哪里,努力放在了什么地方,都是可以直接看得见的。
一.题目:下面程序实现如下功能:输入一个整数字符串转换为一个整值,如”1234”转为1234,”-1234”转
换为-1234。
二.思路: 定义一个数组用来存放输入字符串
输入整数字符串(加判断条件,确定是数字字符串)
将字符串转换为int型整数值
三.程序:
#include <stdio.h>
#include <string.h> #define SIZE 64
int main(void)
{
char String[SIZE] = {};
int Number[SIZE] = {};
int nStart = ;
int i,j; printf("please input the string :\n");
gets(String);
//判断字符串是否带有负号
if(String[] == '-')
{
nStart = ;//如果是负数,则从字符数组第二个元素开始转换
}
else
nStart = ;//如果是正数,则将字符数组直接转换 //将字符串转换成数字,正负号不参与整型数组的存储,故j从0开始
for(i=nStart,j=;String[i];i++,j++)
{
Number[j] = String[i] - '' ;
}
//判断是不是负号,打印出来
printf("%c",String[]);
for(j=;Number[j];j++)
{
printf("%d",Number[j]);
} return ;
}
四.编译运行

五.分析问题
1.运行的结果看上去是想要的
仔细一想,不对,这只是按照想要的结果方式打印出来了,其实并没有真正实现字符串转化成整型数据,
而是利用%s将正负号打印出来而已,更何况整型数据竟然是存在数组里,编程的时候还在纠结正负号到
底放在第几个元素,搞笑,题目要求的是将字符串转换为一个整型数字!是数字!
2.那么,正负号的问题怎么解决呢?
别忘了,你定义数字的时候用int类型,它本身就是带符号的,根据你输入字符串的正负号,在数字前面
加个正负号就行啦~

3.不是说好了要加判断条件以确保是数字字符串吗?可是在输入时用gets()或者是scanf()怎么样才可
以加以判断嘛?
在输入的时候我们当然没办法来阻止非数字字符的输入,但是可以在转换成整数的过程中判断啊,傻了吧
~

六.改进
#include <stdio.h>
#include <string.h> #define SIZE 64 int main(void)
{
char String[SIZE] = {};
int Number = ;
int nStart = ; printf("please input the string :\n");
gets(String);
//判断字符串是否带有负号
if(String[] == '-')
nStart = ;//如果是负数,则从字符数组第二个元素开始转换
else
nStart = ;//如果是正数,则将字符数组直接转换
//将字符串转换成数字
for(int i=nStart;String[i];i++)
{
if(String[i]>'0' && String[i]>'9')
Number = Number* + (String[i] - '') ;
}
//判断是不是负号,
if(nStart == )
Number = -Number;//如果负数,则把负号添加给Number
printf("the number is :\n");
printf("%d",Number);
return ;
}
七.编译运行

八.网上解答版本
#include<stdio.h>
#include<string.h>
int main(void)
{
char s[];
int n;
long chnum(char *p);
gets(s);
if (*s=='-') n=-chnum(s+);
else n=chnum(s);
printf("%d\n",n);
return ;
}
long chnum(char *p)
{
long sum=;
while(*p)
{
if(*p>=''&&*p<='')
sum=sum*+*p-'';
p++;
}
return sum;
}
相比之下,网上这种解法更加高大上,第一在于封装了那个转换函数,第二在于充分运用了指针和数组的关系,将
数组名当做指针来用。模仿这种方法,自己也练了一下
#include <stdio.h>
#include <string.h> #define SIZE 64 //转换函数,将字符串转换成整型值
int StrToInt(char *p)
{
int sum = ;
while(*p)
{
if(*p>'' && *p<'')
sum = sum* + *p-'';
p++;
}
return sum;//返回整型值
} int main(void)
{
char String[SIZE] = {};
int Number = ;
int nStart = ; printf("please input the string :\n");
gets(String); if(*String == '-')//判断是否是负数
Number = -StrToInt(String+);//如果是负数,从字符串数组第二个元素作为参数开始传入,并在数字 前加负号
else
Number = StrToInt(String);//如果是正数,把字符串数组直接作为参数传入
printf("the number is :\n");
printf("%d",Number);
return ;
}
十.知识点:
1.字符串输入专题
1)gets()函数
2)fgets()函数
3)scanf()函数
3.数组和指针的关系
C语言每日一题之No.5的更多相关文章
- C语言每日一题之No.1
鉴于在学校弱弱的接触过C,基本上很少编程,C语言基础太薄弱.刚好目前从事的是软件编程,难度可想而知.严重影响工作效率,已无法再拖下去了.为此,痛下决心恶补C语言.此前只停留在看书,光看好像也记不住,C ...
- C语言每日一题之No.9
再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规 ...
- C语言每日一题之No.8
正式面对自己第二天,突然一种强烈的要放弃的冲动,在害怕什么?害怕很难赶上步伐?害怕这样坚持到底是对还是错?估计是今天那个来了,所以身体激素有变化导致情绪起伏比较大比较神经质吧(☆_☆)~矮油,女人每个 ...
- C语言每日一题之No.4
这几天老大也没安排我什么项目,于是想正好趁着空补C.当然,是利用晚上加班时间,白天正常上班时间还是学习公司的平台. 今儿个突然弱弱的感觉到在公司补C是件很低级的事情,哪怕是在加班时间都会被喷,因为大家 ...
- C语言每日一题之No.3
几天下来,感慨学习要坚持下来真的是件很难的事,本来说了每天一题,可是毕竟这是个细活,需要用心雕琢,有时候真的不能当天拿下来>_<.虽然说只是一题,却涉及到很多小细节,慢慢的琢磨直至完全摸透 ...
- C语言每日一题之No.12
文件操作知识:如何将一个文件的内容读取到另一个文件里? fread函数和fwrite函数 1.函数功能 用来读写一个数据块. 2.一般调用形式 fread(buffer,count,siz ...
- C语言每日一题之No.7
今天是正式第一天在现有的世界里与自己相处,你再也没有另一个世界可以躲避了.终于要自己面对自己了,一个人要真实的面对自己的灵魂总是痛苦的.从学校到社会的环境转换,现实与理想的冲突,个人价值观和社会价值观 ...
- C语言每日一题之No.6
人总要战胜内心的懦弱的,我不能一直这么缩在里边.终究向自己发出了挑战,还是会伤心的时候,发愣的时候.如果可以,我也希望像盗梦空间的女主一直沉在两个人的梦里永远不要醒来.可是,我们谁又能抗拒时间呢?这雨 ...
- C语言每日一题之No.2
题目:已知三个整型数8,12,6,按公式s=a+b*c计算,并显示结果 思路:定义三个整型变量a,b,c 定义一个变量s用来保存运算结果 输出 程序: #include <stdio.h> ...
随机推荐
- nginx+tomcat集群配置(2)---静态和动态资源的分离
前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx ...
- 递归神经网络(RNN)简介(转载)
在此之前,我们已经学习了前馈网络的两种结构--多层感知器和卷积神经网络,这两种结构有一个特点,就是假设输入是一个独立的没有上下文联系的单位,比如输入是一张图片,网络识别是狗还是猫.但是对于一些有明显的 ...
- ZOJ 1067 Color Me Less
原题链接 题目大意:一道类似于简单图像压缩的题目.给定一个调色板,然后把24位真彩色按照就近原则聚类. 解法:每个像素的色彩都是RGB三个值,相当于三维空间的一个点.所以当一个新的像素进来时,分别和调 ...
- c 深度剖析 4
1 预处理 1#define 1.不能用 #define 定义注释,因为注释先于预处理被处理. 2 .宏定义表达式 1,注意展开后结合顺序,尽量多加括号 2,常量定义时注意是否溢出 1 #define ...
- VPS搭建VPN(pptpd)
环境:Ubuntu Server 12.04 下载FQ程序 wget http://cdxf.yun.ftn.qq.com/ftn_handler/40ad8a2875adf1f7b5193f54a5 ...
- Linux驱动设计——阻塞和同步
阻塞和非阻塞是设备访问的两种基本方式,阻塞和非阻塞驱动程序使用时,经常会用到等待队列. 阻塞和非阻塞 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.被挂起的 ...
- CSS中控制换行的四种属性
一.white-space 可以实现HTML中PRE标签的效果,以及单元格的noWrap效果,点此查看示例. Example Source Code 语法: white-space : normal ...
- caffe: test code 执行出问题: Check failed: FLAGS_weights.size() > 0 (0 vs. 0) Need model weights to score.
Check failed: FLAGS_weights.size() > 0 (0 vs. 0) Need model weights to score. 出现这个错误,但是我记得昨天还好好的, ...
- jQuery序列化后的表单值转换成Json
$.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() ...
- Qt QTreeWidget 树形结构实现(转)
Qt中实现树形结构可以使用QTreeWidget类,也可以使用QTreeView类,QTreeWidget继承自QTreeView类.树形效果如下图所示: 这是怎么实现的呢?还有点击节点时会有相应的事 ...