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