过滤多余字符不知道怎么做

题目描述 输入一行文本,包括大小写字母、数字、空格等。要求过滤掉除字母以外的其他字符,并将所有的大写字母转换成小写字母,然后将字母从小到大排序,输出结果。 输入要求 一行,一行文本,长度小于 1000。 输出要求 一行,处理后的结果。 输入样例 复制 She sells sea shells 输出样例 复制 aeeeehhllllssssss

我的思路是:

1、首先,用fgets()函数把输入的一行文本存入一个字符数组str中,然后去除里面的换行符;

2、然后遍历字符数组str,将里面的小写字母存入备份字符数组temp中,大写字母转为小写字母后再存入备份数组temp中;

3、使用选择排序,按字母从小到大的顺序排序备份数组temp中的字符;

4、把备份数组temp打印出来,以显示最终结果。

参考链接:


http://ascii.wjccx.com/


#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;
          
} 

img