Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5个月前关闭。
我正在学习在字符串数组中的合并排序。这是我的代码:
上面的代码运行良好。但是我想将
那么数组
这正是您的代码中已有的内容(作为参数
如果您想要一个指向指针的指针,则要么需要从一开始就使用该类型(例如
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5个月前关闭。
我正在学习在字符串数组中的合并排序。这是我的代码:
#include <stdio.h>
#include <string.h>
#define SIZE 10
int num = 0;
// Merges two subarrays of arr[].
// First subarray is arr[l..m]
// Second subarray is arr[m+1..r]
void merge(char str[SIZE][10], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
/* create temp arrays */
char L[n1][10], R[n2][10];
/* Copy data to temp arrays L[] and R[] */
for (i = 0; i < n1; i++)
strcpy(L[i], str[l+i]);
for (j = 0; j < n2; j++)
strcpy(R[j], str[m+1+j]);
/* Merge the temp arrays back into arr[l..r]*/
i = 0; // Initial index of first subarray
j = 0; // Initial index of second subarray
k = l; // Initial index of merged subarray
while (i < n1 && j < n2) {
num++;
switch (strcmp(L[i], R[j])) {
case -1 :
strcpy(str[k], L[i]);
i++;
break;
case 1 :
strcpy(str[k], R[j]);
j++;
break;
}
k++;
}
/* Copy the remaining elements of L[], if there
are any */
while (i < n1) {
strcpy(str[k], L[i]);
i++;
k++;
}
/* Copy the remaining elements of R[], if there
are any */
while (j < n2) {
strcpy(str[k], R[j]);
j++;
k++;
}
}
/* l is for left index and r is right index of the
sub-array of arr to be sorted */
void mergeSort(char str[SIZE][10], int l, int r) {
if (l < r) {
// Same as (l+r)/2, but avoids overflow for
// large l and h
int m = l+(r-l)/2;
// Sort first and second halves
mergeSort(str, l, m);
mergeSort(str, m+1, r);
merge(str, l, m, r);
}
}
/* UTILITY FUNCTIONS */
/* Function to print an array */
void printArray(char A[SIZE][10], int size)
{
int i;
for (i=0; i < size; i++)
printf("%s ", A[i]);
printf("\n");
}
int main(void) {
int i, n;
char str[SIZE][10] = {"korea", "aaa", "computer", "seoul", "algorithm", "bbb", "ccc", "ddd", "game", "java"};
char max[10];
printf("Given array is \n");
printArray(str, SIZE);
mergeSort(str, 0, SIZE - 1);
printf("\nSorted array is \n");
printArray(str, SIZE);
printf("횟수 : %d", num);
return 0;
}
上面的代码运行良好。但是我想将
merge(char str[SIZE][10], int l, int m, int r)
和mergeSort(char str[SIZE][10], int l, int r)
,printArray(char A[SIZE][10], int size)
代码更改为使用双指针,而不是char str[SIZE][10]
而是char **str
。如何更改此代码?我试图这样更改,但是发生了一些错误...我必须更改merge()
和char L[n1][10]
的char R[n2][10]
成员中的代码。 最佳答案
虽然数组可以衰减到指向其第一个元素的指针,但数组的数组不会衰减到指向指针的指针。
如果你有
char str[SIZE][10];
那么数组
str
可以衰减为指向其第一个元素的指针,该元素的类型为char (*)[10]
。没有进一步的衰减发生。这正是您的代码中已有的内容(作为参数
char str[SIZE][10]
被编译器视为char (*str)[10]
)。如果您想要一个指向指针的指针,则要么需要从一开始就使用该类型(例如
char **str;
),要么使用一个将衰减为正确类型的指针数组(例如char *str[SIZE];
)。关于c - 如何在C中使用指针合并排序字符串数组? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58168821/
10-16 20:23