C++单词排序

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

在主函数中输入单词,调用函数排序,在主函数中输出结果。字符串个数不超过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(strr,n);//由于不区分大小写,所有的大写字母都转换成小写字母统一比较
    arrange(str,strr,n);//字符串排序
    for(int i=0;i<n;i++)
        cout<<str[i]<<endl;
    return 0;
}

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值