A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


我实在不知道发什么,为了赚技术分,只能把之前的基础测试题拿来凑数啦~,以后遇见好的题目会再来和大家一起分享的。
同时,也希望大家对我编写的代码给点建议,大家一起来交流一下

/*
9、 从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。(C语言)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 200
#define N 6

int main(int argc, const char * argv[])
{
    printf("第9题开始:\n");
    //定义6个字符串指针变量
    char *input[N] = {'\0'};
   
    printf("请输入6个字符串(仅仅包含英文字母和数字,以回车键结束每一个字符串的输入):\n");
    for (int i = 0; i < N; i++)
    {
        input[i] = (char *)malloc(M);
        INPUT_SECTION:
        printf("请输入第%d个字符串:\n",i+1);
        //分配存储空间
        scanf("%s",input[i]);
        //存储其首字母地址(相当于头指针)
        char *h = input[i];
        //遍历字符串
        while (*input[i])
        {
            //如果输入的不是英文字母和数字,提示错误信息并且重新输入
            if ((*input[i] >= '0' && *input[i] <= '9') || (*input[i] >= 'a' && *input[i] <= 'z') || (*input[i] >= 'A' && *input[i] <= 'Z')) {
                input[i]++;
            }
            else{
                printf("输入有误,请重新输入!\n\n");
                rewind(stdin);
                //虽然goto语句并不推荐使用,但是我觉得在这里使用还是很方便的
                goto INPUT_SECTION;
            }
        }
        //指针移动到其首地址
        input[i] = h;
    }
    //遍历字符串进行比较并且排序,输出排序后结果
    for (int i = 0; i < N; i++)
    {
        for (int j = i + 1; j < N; j++)
        {
            /*strlen()求字符串长度函数和strcmp()字符串比较函数,包含在<string.h>中。
             题目中有点歧义,并没有说按字符串长度还是按照ASCII码排列,
             我认为从小到大排列是:
             (1)先按字符串长度
             (2)相同长度的按照ASCII码排列
             */
            if ((strlen(input[i]) > strlen(input[j])) || ((strlen(input[i]) == strlen(input[j])) && (strcmp(input[i], input[j]) > 0)))
            {
                char *temp = "";
                temp = input[i];
                input[i] = input[j];
                input[j] = temp;
            }
        }
        printf("输出第%d个字符串:%s\n",i+1,input[i]);
    }
    printf("第9题结束\n");
    return 0;
}

1 个回复

正序浏览
So然后 2015-3-31 18:39:37
沙发
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马