测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A52047. 单词排序

填空题 中等

题目描述

单词排序

题目描述

写程序,对输入的若干单词按词典排序,不区分大小写。要求字符串的比较、复制、大小写转换、排序等工作均用函数实现。

在主函数中输入单词,调用函数排序,在主函数中输出结果。字符串个数不超过100个,每个单词的长度不超过20。

不能使用系统的字符串处理库函数,不能使用标准模板库的类和函数。

输入

两行:第1行为单词个数n,第2行为n个单词,用空格隔开。

输出

n行,每行一个单词。

输入样例

5
sin cos log exp sqrt

输出样例

cos
exp
log
sin
sqrt

参考答案

#include <iostream> using namespace std; char strr[100][20];//定义一个全局变量,因为str的大小写虽然忽略但是不能改变, //所以设置一个全局变量,改变全局变量的大小写,用全局变量进行同样的比较、排序,但最后用str输出 void strcpy(char *str1,char *str2) { //字符串复制函数 while((*str1++=*str2++)!='\0'); } void reserve(char str[100][20],int n) { char *s; for(int i=0; i<n; i++) { s=&strr[i][0];//定义一个指针变量*s指向数组每一行字符串的首地址 while(*s!='\0') { //大写转小写 if(*s>='A'&&*s<='Z')//*s代表的是对应字符串第几个元素的值 *s+=32; *s++;//指针向后移动 } } } int strcmp(char *str1,char *str2) { //比较字符串大小 while(*str1!='\0' && *str2!='\0' && *str1==*str2) { *str1++; *str2++; } if(*str1>*str2) return 1; else if(*str1<*str2) return -1; else return 0; } void arrange(char str[100][20],char strr[100][20],int n) { //字符串排列 for(int i=0; i<n-1; i++) { int j=i; for(int k=i+1; k<n; k++) { if(strcmp(strr[j],strr[k])==1) { //前者比后者大,就换位置 char s[20]; strcpy(s,str[j]); strcpy(str[j],str[k]); strcpy(str[k],s); strcpy(s,strr[j]); strcpy(strr[j],strr[k]); strcpy(strr[k],s); } } } } int main() { char str[100][20]; int n; cin>>n; for(int i=0; i<n; i++) cin>>str[i]; for(int i=0; i<n; i++) { for(int j=0; j<20; j++) { strr[i][j]=str[i][j]; } } reserve(str,n);//由于不区分大小写,所有的大写字母都转换成小写字母统一比较 arrange(str,strr,n);//字符串排序 for(int i=0; i<n; i++) cout<<str[i]<<endl; return 0; }

答案解析

C++单词排序

上一题 下一题