实验7-3-7 字符转换 (15分)

.getchar()是头文件<stdio.h>的库函数,第一次调用此函数时需要人工输入字符或字符串,每次调用读入一个字符;如果第一次人工输入的字符数大于1,则在下一次调用该函数时不需要人工输入,编译器会直接从缓冲区按顺序一个一个读取

解题思路

  1. 首先人工输入一至多个字符,将所有字符存入字符数组1
  2. 遍历字符数组1,将表示数字的字符存入字符数组2
  3. 遍历字符数组2,将所有字符转换为整型数字打印输出
#include<stdio.h>
#include<string.h>
#define N 100     //没有分号
int main()
{
	char ch;
    int len1=0,len2=0;
    char str1[N];//存储输入的字符串
    char str2[N];//存储处理后的字符串
    int sum=0;
    int temp=1;
 //步骤一:人工输入字符,将字符存入字符数组1
	ch = getchar();  //输入字符串
	for (int i = 0; ch != '\n'; i++)
	{
		str1[i] = ch;
		len1++;//记录字符数组1输入的字符个数
		ch = getchar();//从缓冲区按顺序一个一个读取
	}
//步骤二:将输入的数字字符存入字符数组2
	for (int j = 0; j < len1; j++) //初步处理字符串,得到‘0’ 到 ‘9’的字符数组
	{
		if (str1[j] >= '0' && str1[j] <= '9')
		{
		/*之前写的代码是:
		str2[j] = str1[j];
		但是后来发现str2的下标是遇见数字字符才加一,
		而str1的下标是每循环一次就加一*/
			str2[len2++] = str1[j];  //经典:获取字符串中需要的字符。设置计数器,只有发现大写字母时len2才进行加1 处理
		}
	}
//步骤三:从字符数组尾开始计算求和输出

/*一开始的想法是将字符数组2的各个字符转换成字符依次输出,
但是有一个测试点出错(第一个数字为0时,输出的整数应该以一个
非零数开头),修改过后选择将数字按个位、十位、百位……加和后
输出。*/

/*    for(int k=0;k<len2;k++){
        printf("%d",str2[k]-'0');
    }
*/
	for (int k = len2-1; k >= 0; k--)
	{
		sum += (str2[k] - '0') * temp;
		temp *= 10;
	}
	printf("%d\n", sum);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值