我的一个数组字符排序(输入可以用回车结束)

这几天,我写了一个用数组指针来排序的程序。因为用数组指针可以提高程序执行的时间,因为这可以不必移动原来的 数值内容。而只要用一个数组指针来指向就可以了。   下面是我用gets和scanf来分别做的代码。会发现有很多的不同。
1   的代码如下:
# include <stdio.h>
# include <string.h>
int main()
{
    char aa[10][20] ,*p[10],*temp;
    int k,j,i=0;
    printf("输入要排序的字符串,以回车结束。/n");
    do{
        gets(aa[i]);     //注意,scanf不能获取回车。
        p[i] = aa[i] ;
        i++;
       
    }while (strlen(aa[i-1]) != 0 && i < 10);
//while (strcmp(aa[i-1]," ") != 0 && i < 10);
    printf("i is %d/n",i);
    printf("开始排序。/n");
    for (j = 0;j < i - 1; j++)
    {
        for(k = j + 1; k < i - 1; k++)
        {
           
            if(strcmp(p[j], p[k]) >= 0)
            {   
                temp = p[k] ;       
                p[k] = p[j] ;
                p[j] = temp ;
            }
        }
    }
    for (j = 0;j < i - 1; j++)
        printf("%s/n",p[j]);
}
运行结果如下:
[root@localhost apue example]# ./gets.out
输入要排序的字符串,以回车结束。
fajl
fdsa
erafas
fasg

i is 5
开始排序。
erafas
fajl
fasg
fdsa
[root@localhost apue example]#
注意:其中有个空白行,是我用回车。

2 的代码如下:
# include <stdio.h>
# include <string.h>
int main()
{
    char aa[10][20] ,*p[10],*temp;
    int k,j,i=0;
    printf("输入要排序的字符串,以回车结束。/n");
    do{
        scanf("%s",aa[i]);     //注意,scanf不能获取回车。
        p[i] = aa[i] ;
        i++;
       
    } while (strcmp(aa[i-1],"q") != 0 && i < 10);    // while (strlen(aa[i-1]) != 0 && i < 10);

    printf("i is %d/n",i);
    printf("开始排序。/n");
    for (j = 0;j < i - 1; j++)
    {
        for(k = j + 1; k < i - 1; k++)
        {
           
            if(strcmp(p[j], p[k]) >= 0)
            {   
                temp = p[k] ;       
                p[k] = p[j] ;
                p[j] = temp ;
            }
        }
    }
    for (j = 0;j < i - 1; j++)
        printf("%s/n",p[j]);
}

运行结果如下:
[root@localhost apue example]# ./sorting.out
输入要排序的字符串,以回车结束。
fjas;lg
fas
ewrtfeg

fas
q
i is 5
开始排序。
ewrtfeg
fas
fas
fjas;lg
[root@localhost apue example]#
注意:其中有个空白行,是我用回车。

感想:
1    要用回车做数组的结束符的话,只能用gets 加 strlen的方法。因为从上面可以看出来scanf是不能接收回车和空格的。比如:你用一个scanf 后,你输入回车和空格,或只有回车等,都没有用。
2  对于字符排序有了比较深刻的印象。
3 可以把一个字符串赋值给一个指针值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值