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

来源:互联网 发布:中国长征火箭 vi 知乎 编辑:程序博客网 时间:2024/06/05 06:48
这几天,我写了一个用数组指针来排序的程序。因为用数组指针可以提高程序执行的时间,因为这可以不必移动原来的 数值内容。而只要用一个数组指针来指向就可以了。   下面是我用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 可以把一个字符串赋值给一个指针值。