C-字符串完美处理的程序——好好汲取

微笑//I must say I like thses codes.
//在这个程序中包含了对字符串,字符操作的各种函数,
//比如按字符从大到小排序、按字符串从大到小排序、qsort()函数、字符串比较函数strcmp()、字符串复制函数strcpy()
//以及本题对字符串的处理思想-----------------值得我们汲取!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>//定义了qsort(待排序数组,参加排序的元素个数,每个元素占用的字节数,排序方式).

int n;
char word[2000][11],sorted[2000][11];

//字符从小到大比较的排序函数
int cmp_char(const void* _a,const void* _b)
{
    char *a=(char*)_a;
    char *b=(char*)_b;
    return (*a - *b);//排序函数中,只有返回TRUE时才进行某些操作;当返回FALSE时,不理会。
    //因此,若*a<=*b则不理会;若*a>*b,则就要进行排序操作了。哈哈哈,自己理解的,不喜勿喷!
}
//字符串的从小到大的排序函数
int cmp_string(const void* _a,const void* _b)
{
    char *a=(char*)_a;
    char *b=(char*)_b;
    return strcmp(a,b);
}

int main()
{
    n=0;
    for(;;)
    {
        //字典中的每一个字符串都放入word[]字符串数组中
        scanf("%s",word[n]);
        if(word[n][0]=='*')
            break;
        n++;
    }
    //对word[]字符串数组中的字符串元素进行从小到大的排序
    qsort(word,n,sizeof(word[0]),cmp_string);
    int i;
    for(i=0;i<n;i++)
    {
        //将word[]数组复制给sorted[]数组
        strcpy(sorted[i],word[i]);
        //对sorted[]数组中的每一个字符串元素里的字符进行从大到小的排序
        qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char);
    }
    char str[11];
    while(scanf("%s",str)==1)
    {
        //统一规格,方便比较,beautiful!!!
        //对接收的字符串里的字符也进行从大到小的排序,为比较最好准备
        qsort(str,strlen(str),sizeof(char),cmp_char);
        int found=0;
        for(i=0;i<n;i++)
        {
            //由于字符都是按从小到大的顺序进行排序的,因此,可以很容易比较字符串是否相等
            if(strcmp(str,sorted[i])==0)
            {
                found=1;
                printf("%s ",word[i]);
            }
        }
        if(!found)
            printf(":(" );
        printf("\n");
    }

    return 0;

}

本博客中的程序是针对刘佳汝作者的《算法竞赛入门经典》书籍里的5.3.2字母重排问题的。感觉对自己帮助挺大了,让自己学到了很多东西,故整理到博客上微笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值