在主函数中输入10个字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串(从大到小)。要求用指针数组实现。 函数接口定义: void sort(char *p[N]); 裁判测试程序样例: #include<stdio.h> #include "string.h" #define N 10 void sort(char *p[N]); int main() {char ch[N][20]; int i,j; char *t[N]; //定义指针数组 for (i=0; i<N; i++) //输入10个串 { scanf("%s",ch[i]); t[i]=ch[i]; //建立联系 } sort(t); //利用指针数组排序 for(i=0; i<N; i++) //输出 printf("%s\n",t[i]); return 0; } /* 你写的函数将被嵌在这里 */ 输入样例: qwe asd zxc hg up cctv are not goto head 输出样例: are asd cctv goto head hg not qwe up zxc c语言写程序
时间: 2024-01-16 10:04:51 浏览: 110
以下是实现sort函数的代码:
```c
void sort(char *p[N]) {
int i, j;
char *temp;
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (strcmp(p[i], p[j]) < 0) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
```
在sort函数中,我们使用了冒泡排序的方法,依次比较相邻的两个字符串,如果前面的字符串比后面的字符串小,则交换它们的位置。
在主函数中,我们定义了一个指针数组t,将每个字符串的地址赋值给t中的相应元素,然后调用sort函数进行排序,最后输出排序后的字符串。需要注意的是,因为sort函数中修改的是指针数组中元素的顺序,因此在输出时直接输出指针数组中的元素即可。
相关问题
在主函数中输入10个字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。要求用行指针实现。
好的,这是一个需要用到指针和字符串的排序问题,我可以帮你解答。
下面是一个示例代码,你可以参考一下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
#define STR_NUM 10
void sortStrings(char* strings[], int num) {
// 冒泡排序
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - i - 1; j++) {
if (strcmp(strings[j], strings[j + 1]) > 0) {
char temp[MAX_LEN];
strcpy(temp, strings[j]);
strcpy(strings[j], strings[j + 1]);
strcpy(strings[j + 1], temp);
}
}
}
}
int main() {
char strings[STR_NUM][MAX_LEN]; // 字符串数组
char* strPtr[STR_NUM]; // 字符串指针数组
// 输入字符串
for (int i = 0; i < STR_NUM; i++) {
printf("请输入第 %d 个字符串:", i + 1);
fgets(strings[i], MAX_LEN, stdin);
strings[i][strlen(strings[i]) - 1] = '\0'; // 去掉字符串末尾的换行符
strPtr[i] = strings[i]; // 将字符串指针指向对应的字符串数组元素
}
// 排序
sortStrings(strPtr, STR_NUM);
// 输出排序后的字符串
printf("排序后的字符串为:\n");
for (int i = 0; i < STR_NUM; i++) {
printf("%s\n", strPtr[i]);
}
return 0;
}
```
这个程序中,我们首先定义了一个字符串数组 `strings` 和一个字符串指针数组 `strPtr`。我们通过 `fgets` 函数从标准输入中逐行读入字符串,并将其存储在 `strings` 数组中。注意,在存储字符串前,我们需要去掉字符串末尾的换行符,并将 `strPtr` 中的指针指向对应的 `strings` 数组元素。
接着,我们调用 `sortStrings` 函数对 `strPtr` 数组中的字符串进行排序。这里使用的是冒泡排序算法。
最后,在主函数中输出排序后的字符串。
希望这个示例代码可以帮助到你。
在主函数中输入十个等长的字符串用另一函数对它们排序然后在主函数输出这十个已经排好序的字符串用指针的方法
以下是用指针的方法实现字符串排序的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void sort_strings(char *strings[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (strcmp(strings[i], strings[j]) > 0) {
char *temp = strings[i];
strings[i] = strings[j];
strings[j] = temp;
}
}
}
}
int main() {
const int n = 10;
const int len = 50;
char strings[n][len];
for (int i = 0; i < n; i++) {
cin.getline(strings[i], len);
}
char *ptrs[n];
for (int i = 0; i < n; i++) {
ptrs[i] = strings[i];
}
sort_strings(ptrs, n);
cout << "Sorted strings:" << endl;
for (int i = 0; i < n; i++) {
cout << ptrs[i] << endl;
}
return 0;
}
```
代码中首先在主函数中定义了一个二维字符数组 `strings`,大小为 10 行 50 列,用于存储输入的字符串。然后使用循环调用 `cin.getline` 函数从标准输入读入这 10 个字符串。
接下来,定义一个指针数组 `ptrs`,用于存储 `strings` 数组中每个字符串的地址。循环遍历 `strings` 数组,将每个字符串的地址存储到 `ptrs` 数组中。
然后调用 `sort_strings` 函数,对 `ptrs` 数组中的指针进行排序。排序使用了冒泡排序算法,每次比较相邻两个字符串,如果前一个字符串大于后一个字符串,则交换它们在 `ptrs` 数组中的位置。
最后,在主函数中输出排序后的字符串,遍历 `ptrs` 数组,依次输出其中的字符串。
阅读全文
相关推荐














