我想从文件中读取字符作为整数,并将它们转换为数组中的字符串后,在mergesort算法中比较字符串。我能够打印出字符串,但是当char[]
数组传递给mergesort算法时,程序在strcmp()
步骤中崩溃,该步骤位于合并排序的merge()
步骤中。C - 如何将字符数组传递给函数进行排序?
我测试,看我的临时char[]
数组不正确初始化,所以我觉得这个问题是我没有通过原始char[]
阵列“夏尔”到mergsort
功能。
我失去了如何做到这一点。我借用了web上的mergesort算法,它适用于int
阵列,但将int[]
阵列更改为char[]
阵列的简单更改不起作用。
如何获得char[]
阵列,我希望排序完成并在mergesort
函数中进行初始化?
的排列是这样的文本文件:
AAAAB
aaaba
aabaa
abaaa
baaaa
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void) {
int arr[243][6];
//This is the array that I want to store my strings
char *charr[243][6];
int c, i = 0 , j = 0;
FILE *file;
file = fopen("permutations.txt", "r");
if (file) {
while ((c = getc(file)) != EOF) {
// we are reading each char in the string
//every time we hit a new line char (\n = 10)
//advance the array one, otherwise add the
// char
if (c != 10) {
arr[i][j] = c;
j++;
}
else {
arr[i][j] = c;
sprintf(charr[i], "%d%d%d%d%d%d", arr[i][0], arr[i][1],
arr[i][2], arr[i][3], arr[i][4]);
i++;
j = 0;
}
}
fclose(file);
}
if (strcmp(charr[0],charr[1]) < 0)
printf("less\n");
else
printf("other\n");
r_mergesort(charr,0,242);
for (int k = 0; k < 243; k++) {
printf(charr[k]);
for (int l = 0; l < 6; l++) {
putchar(arr[k][l]);
}
}
return 0;
}
/*l is for left index and r is right index of the sub-array*/
void r_mergesort (char arr[], int l, int r) {
//base case
if (l < r) {
//divide
int m = (l + r) /2;
// recursively sort halves
r_mergesort(arr, l, m);
r_mergesort(arr, m + 1, r);
// merge results
merge(arr, l, m, r);
}
}
void merge (char arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
// create temp arrays
char left[n1], right[n2];
// copy data to temp arrays
for (i = 0; i < n1; i++) {
left[i] = arr[l + i];
}
for (j = 0; j < n2; j++)
right[j] = arr[m + 1 + j];
// merge the temp arrays back into arr[]
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2) {
if (strcmp(left[i], right[j]) < 0) {
arr[k] = left[i];
i++;
}
else {
arr[k] = right[j];
j++;
}
k++;
}
//copy the remaining elements of left[]
while (i < n1) {
arr[k] = left[i];
i++;
k++;
}
//copy the remaining elements of right[]
while (i < n2) {
arr[k] = right[j];
j++;
k++;
}
}
阵列衰减到指针,所以通过在阵列的大小。 – erip
尝试'char * charr [243] [6];' - >'char charr [243] [7];' – BLUEPIXY
这是一个更大的问题。但是,这将限制字符串长度为5(全部243个......)。 –