昨天在cf上面做的一个字符串处理的题目
debug了很久终于做出来了,很开心
题目点我
下面就是代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char arr[99];//第一个字符数组用来存储数字字符串
char brr[99];//第二个数组用来存储得到的字符串
//我这里采用的是多组输入
int a;
int n;
int b;
int c;
scanf("%d", &n);//读取有多少个测试数据
int count = 0;//定义一个计数器
for (int i = 0; i < n; i++) {//循环读入数据
count = 0;//给计数器初始化
scanf("%d", &a);//每一组数据的长度
getchar();//读入空格并丢掉
gets(arr);//读入整个的字符串
for (int i = a - 1; i >= 0;) {//倒着识别有利于字符的判断
if (arr[i] >= '1' && arr[i] <= '9') {
brr[count] = arr[i] + 48;
count++;
i--;
/*
当读入的是数字1-9的时候直接转化为a-i
他们的ascll码差48,所以加上48;
同时让count++,记录数组长度
然后让i--,为什么i--不写在前面的循环头部
那是因为后面需要让i直接减3
*/
} else if (arr[i] == '0') {
b = (int)arr[i - 1] - 48;
c = (int)arr[i - 2] - 48;
/*
这里当字符为0的时候
必须要向前读入3个字符
b用来储存0前面的那个字符
c用来储存0前面再向前一位的字符
我们把储存的数字字符减去48
这样他们就真的变成了对应的数字
不要忘记强制类型转换
因为后面我们要对他们做加减乘除运算
*/
// printf("%d",(c * 10 + b)+96);
// printf("%c",(c * 10 + b)+96);
brr[count] = (c * 10 + b) + 96;
//对数字加上96再转为字符行就完美的转换为了小写英文字母
count++;
i = i - 3;
/*
这样填入你会发现我们会把英文倒着填入brr字符数组
后面必须倒着遍历
*/
}
}
for (int i = count - 1; i >= 0; i--) {
printf("%c", brr[i]);
}
//遍历整个数组,并且换行
//注意这里的count要减一,因为count最后多加了一个1
printf("\n");
}
return 0;
}
标签:count,arr,String,int,Decode,读入,字符串,include,820
From: https://www.cnblogs.com/harper886/p/17416317.html