前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们一起忘掉的C (九).字符串转数值

那些年我们一起忘掉的C (九).字符串转数值

作者头像
franket
发布2021-10-18 10:47:53
3190
发布2021-10-18 10:47:53
举报
文章被收录于专栏:技术杂记

前言

模块化是程序设计过程中很重要的思想,将复杂的计算过程外包给其它函数,可以简化代码结构

字符串与数字值的转化包含了最基础的转码思想


概要


数字字符串转化为相应的数字

写一个函数实现将任意位数(<=4)数字字符串(0-9)转化为相应的数字,如:将 “123”转化成 123

int str2num(char *s); // 注意输入字符串的检查,必须全部是数字

main(){ ...; r=str2num("1234");}

代码注解

代码语言:javascript
复制
#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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概要
    • 数字字符串转化为相应的数字
      • 代码注解
      • 思路
      • 基础知识点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档