题目描述 输入一行文本,包括大小写字母、数字、空格等。要求过滤掉除字母以外的其他字符,并将所有的大写字母转换成小写字母,然后将字母从小到大排序,输出结果。 输入要求 一行,一行文本,长度小于 1000。 输出要求 一行,处理后的结果。 输入样例 复制 She sells sea shells 输出样例 复制 aeeeehhllllssssss
我的思路是:
1、首先,用fgets()函数把输入的一行文本存入一个字符数组str中,然后去除里面的换行符;
2、然后遍历字符数组str,将里面的小写字母存入备份字符数组temp中,大写字母转为小写字母后再存入备份数组temp中;
3、使用选择排序,按字母从小到大的顺序排序备份数组temp中的字符;
4、把备份数组temp打印出来,以显示最终结果。
参考链接:
#include <stdio.h>
#include <ctype.h> // islower isupper
#include <string.h> // strlen
int main(void){
char str[1000], temp[1000];
printf("请输入一行文本:");
fgets(str,1000,stdin); //从键盘获取一行输入
// 下面这个 可以使用,也不可以不用,不影响结果,只是为了让str数组前面位置存储的是输入的实际文本
// 如果输入的一行文本被字符数组str完全存储,包括结尾的换行符
// 则strlen(str)-1位置的字符是换行符,把它替换为字符串结尾的空字符'\0',
if(str[strlen(str)-1]=='\n'){
str[strlen(str)-1]='\0';
}
int i=0,index=0;
char ch=str[i];
while(ch!='\0'){
ch=str[i];
// https://www.dotcpp.com/course/444
if(islower(ch)!=0 ){ //如果是小写字母,则直接存储到备份数组
temp[index++]=ch;
}else if(isupper(ch)!=0){ // 如果是大写字母,则转为小写字母再存储到备份数组
// http://ascii.wjccx.com/
temp[index++]=ch+32; // 大写字母+32 可以转为大写字母对应的小写字母
}
i++; // 让下标变量指向下一个字符位置
}
temp[index]='\0';
// printf("排序前的结果为:\n");
// printf("%s\n",temp);
//
int j;
// 使用选择排序,从小到大排序字符数组temp里面的字符
for(i=0;i<strlen(temp)-1;i++) {
for(j=i+1;j<strlen(temp);j++){
if(temp[i]>temp[j]){
ch = temp[i];
temp[i]=temp[j];
temp[j]=ch;
}
}
}
// printf("排序后的结果为:\n");
printf("%s",temp);
return 0;
}