求大佬帮忙

会编程的流卡瓦 2020-12-03 12:36:15
本题要求通过input()函数实现输入若干个单词(每单词的长度不超过20,单词的最大数目不超过10)。输入过程中遇到单词*END* 则提前结束输入(*END*不作为后面排序的单词),或单词数目达到10个也结束。然后调用函数paixu(),对这若干个单词按字典顺序进行排序,最后调用函数printArr()输出排序后的单词,输出的单词之间以空格进行分隔,最后一个单词后面没有空格。
#include<stdio.h>
#include<string.h>
int input(char ar2[][21]);
void paixu(char ar2[][21], int n);
void printArr(char ar2[][21], int n);
int main(void)
{
char arr[10][21]={0};
int n;
n=input(arr);
paixu(arr,n);
printArr(arr,n);

return 0;
}
/* 请在这里填写答案 */
...全文
354 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这样有啥问题吗
  • 打赏
  • 举报
回复
int input(char ar2[][21]) { int i; for(i=0;i<10;i++) { scanf("%s",&ar2[i]); if(strcmp(ar2[i],"*END*")==0) {break;} } return i; } void paixu(char ar2[][21], int n) { int i; char ch[40]; if(n==0) {printf("NO WORD");} for(i=0;i<n-1;i++) { strcmp(ar2[i],ar2[i+1]); if(strcmp(ar2[i],ar2[i+1])>=0) { strcpy(ch,ar2[i]); strcpy(ar2[i],ar2[i+1]); strcpy(ar2[i+1],ch); } } } void printArr(char ar2[][21], int n) { char ch=' '; int i; for(i=0;i<n;i++) { if(i==n-1) { ch='\n'; } printf("%s%c",ar2[i],ch); } }
  • 打赏
  • 举报
回复
int input(char ar2[][21]) { int i; for(i=0;i<10;i++) { scanf("%c",&ar2[i]); if(strcmp(ar2[i],"*END*")==0) {break;} } return i; } 这样输入有问题吗
ctrigger 2020-12-04
  • 打赏
  • 举报
回复
抱歉。上面基本实现功能。但不符合楼主要求。忽略吧。。
ctrigger 2020-12-04
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int my_cmp(const void *a, const void *b)
{
char *p = *(char **)a;
char *q = *(char **)b;
return strcmp(p, q);
}

int main(void)
{
char word[21], *arr[10];
int i, size = 0;

while(1)
{
scanf("%s", word);
if(strcmp(word, "END") == 0) break;
arr[size] = malloc(strlen(word) + 1);
strcpy(arr[size], word);
size++;
if(size == 10) break;
}

qsort(arr, size, sizeof(char *), my_cmp);

for(i=0; i<size; i++)
{
printf("%s\t", arr[i]);
free(arr[i]);
}

return 0;
}

自信男孩 2020-12-04
  • 打赏
  • 举报
回复
排序和输出都是有问题的。自己先调试一下吧
自信男孩 2020-12-04
  • 打赏
  • 举报
回复
#define MAX_COL_SIZE        21
int input(char ar2[][MAX_COL_SIZE])
{
int i=0;
//while(i<10&&ar2!='*END*')
while(i<10&&strcmp(ar2[i], "END"))
{
//gets(ar2);
fgets(ar2[i], MAX_COL_SIZE, stdin);
i++;
}

return i;
}

字符串比较要用库函数,否则就是用循环,一个字符一个字符的比较。
  • 打赏
  • 举报
回复
int input(char ar2[][21]) { int i=0; while(i<10&&ar2!='*END*') { gets(ar2); i++; } return i; } void paixu(char ar2[][21], int n) { int i,j,t; for(i=0;i<n-1;i++) { for(j=i+1;j<n-1;j++) { if(ar2[j+1][0]<=ar2[j][0]) { t=ar2[j][0]; ar2[j][0]=ar2[j+1][0]; ar2[j+1][0]=t; } } } } void printArr(char ar2[][21], int n) { int i; char ch=' '; for(i=0;i<n;i++) { if(i==(n-1)) {ch='\n';} printf("%d%c",ar2[i][21],ch); } return ar2; } 错了
自信男孩 2020-12-03
  • 打赏
  • 举报
回复
自己先写写,用scanf %s或fgets,要不就是getchar()循环

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧