我无法在c中整理出一个名单。我有用于对名称进行排序的代码,但是当我将它们打印出来时,它们仍然与它们在开头时的顺序相同,所以有些东西是不正确的。所以我需要帮助的功能是sort_data函数。我将发布我的所有代码,以便它们可以帮助你们帮助我!非常感谢,这个功能整个早上一直在杀我。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LEN 25
void insert_data(char **strings, const char* filename, int size);
void allocate(char ***strings, int size);
void sort_data(char **strings, int size);
int main(int argc, char* argv[]){
if(argc != 4){
printf("Wrong number of args");
}
char **pointer;
int size = atoi(argv[1]);
allocate(&pointer, size);
insert_data(pointer, argv[2], size);
sort_data(pointer,size);
}
void sort_data(char **strings, int size){
int i, j;
char temp[MAX_STRING_LEN];
for( i = 1; i < size; i++){
strcpy(temp, strings[i]);
j = i - 1;
while( j >= 0 && strcmp(strings[i], temp) > 0)
{
strcpy(strings[j+1], strings[j]);
j = j - 1;
}
strcpy(strings[j+1], temp);
}
int z;
for(z = 0; z < size; z++){
printf("\n%s", strings[z]);
}
}
void allocate(char ***strings, int size){
int i;
*strings = malloc(sizeof(**strings) * size);
for( i = 0; i < size; i++)
{
(*strings)[i] = malloc(sizeof(char) * MAX_STRING_LEN);
}
}
void insert_data(char **strings, const char* filename, int size){
FILE *input;
input = fopen(filename, "r");
int i;
for (i = 0; i < size; i++){
fscanf(input,"%24s", strings[i]);
}
fclose(input);
}
我正在阅读的列表如下:
所以我需要按字母顺序获取这个列表,但是当我运行我的代码并在运行sort函数后打印出这个列表时,它们仍然按此顺序排列。非常感谢你的帮助。
答案 0 :(得分:1)
你输入的是什么&#39; size&#39;这里吗?
在sort_data()中,您似乎将其用作最大字符串大小:
char temp[size];
还有列表中的字符串数量:
for( i = 1; i < size; i++)
我不知道这是否是你唯一的问题,但它肯定会在某些时候咬你。
ETA:你的while循环需要工作。请注意,在每次迭代中,您都在比较字符串[i]&#39;到了“临时”,在循环之前将它们设置为彼此相等。内部循环内部没有任何内容会被执行,最后你只需要复制“临时”内容。回到&#39;字符串&#39;中的相同位置。
花几分钟时间确定每次运行循环时需要发生的事情。在纸上运行它,并写下数组的内容和'i&#39;的值。和&#39; j&#39;。