题目描述 输入一行文本,包括大小写字母、数字、空格等。要求过滤掉除字母以外的其他字符,并将所有的大写字母转换成小写字母,然后将字母从小到大排序,输出结果。 输入要求 一行,一行文本,长度小于 1000。 输出要求 一行,处理后的结果。 输入样例 复制 She sells sea shells 输出样例 复制 aeeeehhllllssssss
1条回答 默认 最新
- a5156520 2023-01-24 15:07关注
我的思路是:
1、首先,用fgets()函数把输入的一行文本存入一个字符数组str中,然后去除里面的换行符;
2、然后遍历字符数组str,将里面的小写字母存入备份字符数组temp中,大写字母转为小写字母后再存入备份数组temp中;
3、使用选择排序,按字母从小到大的顺序排序备份数组temp中的字符;
4、把备份数组temp打印出来,以显示最终结果。
参考链接:https://www.dotcpp.com/course/444http://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; }
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
- ¥15 ADS时域 连续相位观察方法
- ¥15 Opencv配置出错
- ¥15 模电中二极管,三极管和电容的应用
- ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
- ¥15 气象网格数据与卫星轨道数据如何匹配
- ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
- ¥15 微软账户问题不小心注销了好像
- ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
- ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused