c语言完成:连续读入N个(不超过100)字符串(长度不超过100),当读入空行时停止输入; 对所读取的字符串排序,将它们按从大到小的顺序排列后输出。(不包括空字符串)。 输入: N个单词(空行表示结束) 输出: 排序后的顺序
时间: 2023-08-31 18:33:03 浏览: 120
### 回答1:
c语言代码如下:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 110
int main()
{
char str[MAX_LEN]; // 存储输入的字符串
char *string[MAX_LEN]; // 存储输入的所有字符串的指针数组
int len = 0; // 记录输入的字符串数
// 连续读入字符串,遇到空行停止输入
while (gets(str) != NULL && str[0] != '\0')
{
// 为每一个字符串分配内存空间
string[len] = (char*)malloc((strlen(str)+1)*sizeof(char));
// 将字符串复制到指针数组中
strcpy(string[len], str);
len++;
}
// 对字符串数组按照字符串长度排序
for (int i = 0; i < len-1; i++)
{
for (int j = i+1; j < len; j++)
{
if (strlen(string[i]) < strlen(string[j]))
{
char *temp = string[i];
string[i] = string[j];
string[j] = temp;
}
}
}
// 输出排序后的字符串
for (int i = 0; i < len; i++)
printf("%s\n", string[i]);
// 释放内存空间
for (int i = 0; i < len; i++)
free(string[i]);
return 0;
}
```
上面的代码使用了动态内存分配的方式来存储字符串。在读入每一个字符串时,使用`malloc`函数为该字符串分配内存空间,然后使用`strcpy`函数将字符串复制到指针数组中。最后使用循环释放每一个字符串所占用的
### 回答2:
题目要求输入N个字符串,然后按照字符串的大小从大到小进行排序,最后输出排序后的字符串顺序。
首先,我们可以使用一个字符数组来存储输入的字符串,定义一个二维数组str[N][100],其中N表示最多输入N个字符串,每个字符串长度不超过100。
然后,我们可以使用一个循环来连续读入N个字符串。在每次循环中,我们使用fgets函数来读入一行字符串,并将其存储到str数组中,直到读入的字符串为空行为止。
接下来,我们可以使用冒泡排序来对所读取的字符串进行排序。首先,我们定义一个临时字符串temp,用于交换两个字符串的位置。然后,使用嵌套的两层循环,遍历所有字符串,比较相邻的两个字符串的大小,并进行交换,以达到从大到小排序的目的。
最后,我们使用一个循环将排序后的字符串依次输出。
具体实现如下:
```c
#include<stdio.h>
#include<string.h>
#define N 100 // 最多输入N个字符串
int main() {
char str[N][100]; // 存储输入的字符串
char temp[100]; // 用于交换的临时字符串
// 读入字符串
int i = 0;
while (fgets(str[i], sizeof(str[i]), stdin) != NULL) {
// 若读入的字符串为空行,则停止输入
if (strcmp(str[i], "\n") == 0) {
break;
}
i++;
}
// 冒泡排序
int j, k;
for (j = 0; j < i - 1; j++) {
for (k = 0; k < i - j - 1; k++) {
if (strcmp(str[k], str[k+1]) < 0) {
strcpy(temp, str[k]);
strcpy(str[k], str[k+1]);
strcpy(str[k+1], temp);
}
}
}
// 输出排序后的字符串
for (j = 0; j < i; j++) {
printf("%s", str[j]);
}
return 0;
}
```
以上是使用C语言完成的答案,连续读入N个字符串并排序后输出排序结果。
### 回答3:
可使用C语言的字符串处理函数来实现对字符串的排序和输出。具体实现步骤如下:
1. 首先,定义一个指针数组来存储输入的字符串。假设输入的字符串个数为N个,定义一个字符指针数组str[N]。
2. 接着,通过循环读取输入的字符串,直到遇到空行为止。循环的条件可以是使用fgets函数读取输入的字符串,并判断读取的字符串是否为空行。
3. 将每次读取的字符串存储到str数组中的对应位置。比如第一个读取到的字符串可以存储到str[0],第二个读取到的字符串存储到str[1],以此类推。
4. 完成字符串输入后,使用字符串处理函数qsort对str数组进行排序。排序时需要自定义比较函数。
5. 编写自定义的比较函数compare,作为qsort函数的第三个参数传入。该比较函数的作用是比较两个字符串的大小,以实现从大到小的排序。
6. 最后,遍历排序后的str数组,将每个字符串按顺序输出到控制台。
以下是参考代码实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 自定义的比较函数,用于字符串比较
int compare(const void *a, const void *b) {
return strcmp(*(char**)b, *(char**)a);
}
int main() {
int N;
char str[100][101]; // 定义指针数组来存储字符串
printf("请输入N的值:");
scanf("%d", &N);
// 清空输入缓冲区
while(getchar() != '\n');
printf("请输入字符串:\n");
// 循环读取并存储字符串
for (int i = 0; i < N; i++) {
fgets(str[i], 101, stdin);
str[i][strlen(str[i])-1] = '\0'; // 将换行符替换为字符串结束符
if (strlen(str[i]) == 0) break; // 遇到空行停止输入
}
// 使用字符串处理函数qsort对str数组进行排序
qsort(str, N, sizeof(str[0]), compare);
printf("排序后的字符串为:\n");
// 输出排序后的字符串
for (int i = 0; i < N && strlen(str[i]) > 0; i++) {
printf("%s\n", str[i]);
}
return 0;
}
此代码通过循环读取输入的字符串,存储到字符指针数组中,然后使用qsort函数进行排序,并按照从大到小的顺序输出排序后的字符串。注意,在输入字符串时,使用fgets函数来读取输入,以避免出现输入缓冲区溢出的问题。同时,为了确保空行停止输入,可以检查读取到的字符串是否为空行,并在空行时跳出输入循环。
阅读全文