模块化是程序设计过程中很重要的思想,将复杂的计算过程外包给其它函数,可以简化代码结构
字符串与数字值的转化包含了最基础的转码思想
写一个函数实现将任意位数(<=4)数字字符串(0-9)转化为相应的数字,如:将 “123”转化成 123
int str2num(char *s);
// 注意输入字符串的检查,必须全部是数字
main(){ ...; r=str2num("1234");}
#include <stdio.h>
#include <string.h> //求字符串长度的函数strlen,需要这个头文件被包含
#define LENGTH 10 //通过在这里定义宏,可以方便地进行全局修改
int mi(int n) //定义一个根据数位反馈权值的函数,接受一个整型位数n,反馈幂值
{
return (n==1)?1:10*mi(n-1); // 反馈10的n-1次方作为权值
}
int checkstr(char *sp) //定义一个函数,检查指定字符串中是否包含非法字符
{
char *p;
for(p=sp;*p != '\0';p++) //遍历每个字符
{
if (*p < '0' || *p > '9') //如果这个字符不在['0','9']的范围里,则属于非法字符
{
printf ("please reinput the number string, error number %c\n",*p); //将非法字符打印出来
return 0; //遇到非法字符返回0
}
}
return 1; //检查正常返回1
}
int str2num(char *sp) //定义一个字符串转数值的函数,接受一个字符指针作为参数
{
int len,sum=0;
char *p;
len=strlen(sp); //计算出字符串长度,并且保存到len中
for(p=sp;*p != '\0';p++,len--) sum+= (*p-'0') * mi(len); //遍历字符串中每个元素,并且将其转化为数值后乘以权重累计到sum中,这里调用了上面定义的幂函数
return sum; //将数值返回
}
main()
{
char s[LENGTH];
printf("please input a number string (less then %d chars):\n",LENGTH);
scanf("%s",s); //将输入的字符串保存到字符数组s中
if (checkstr(s) == 0) return 0; //如果检查不通过,则直接返回
printf("the string is %s\n",s);
printf("the sum is %d\n",str2num(s)); //将数字字符串进行转化,并且直接将结果进行输出
return 0; //输入->检查->转化->输出 这个处理流程就变得很清晰了
}
将输入字符串进行保存,然后检查,然后转化翻译为数值,然后输出
数字字符串中的每一位都有不同的权重,在转化为数值的过程中要将权重考虑在内
原文地址
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。