我需要绘制一个接收指针数组(到字符串)的函数,并按字符串的长度对指针进行排序。最短的字符串将位于第一位,依此类推。我尝试了以下代码,但它不起作用:
void Q5(){
char str[MAXL][MAXC];
int i;
char** p;
printf("Please enter %d Strings max length = %d\n",MAXL,MAXC);
for (i = 0; i < MAXL; i++){
scanf("%s", str[i]);
}
p = &str;
sort_String(p,MAXL);
printf("\n");
for (i = 0; i < MAXL; i++){
printf("%s", str[i]);
printf("\n");
}
}
void sort_String(char* str,int size){
char* tempP=*str;
char* i,*j;
for (i=str; i < str+size;i++){
for (j=i+1; j < str+size; j++){
if (strlen(i) > strlen(j)){
tempP = j;
j = i;
i = tempP;
}
}
}
答案 0 :(得分:0)
要实现您所说的动态malloc
所需的部分,您可以使用此代码。但是您无法更改不允许的阵列位置(位置)。
// L-> number of strings
// C-> character needed
char **str=malloc(sizeof(char*)*L);
for(i=0;i<MAXL;i++)
str[i]=malloc(sizeof(char)*C);
然后您可以简单地应用您编写的冒泡排序。
您需要在排序函数中传递char**
。
不需要迭代sort
函数中的指针变量。如果按照我的提议动态分配,那么你可以这样编码: -
void sort_String(char** str,int size)
{
char* tempP;
int i,j;
for (i=0; i < size;i++){
for (j=i+1; j < size; j++){
if (strlen(str[i]) > strlen(str[j])){
tempP = str[j];
str[j ]= str[i];
str[i] = tempP;
}
}
}
}
虽然没有给出正确的代码,但是有一些问题,例如Q5()&#39; s }
缺失。举MCV
示例。
注意:我假设您使用的是c编译器。这就是我避免施法的原因。在C中,您不需要转换malloc的返回值。 malloc返回的void指针自动转换为正确的类型。但是,如果您希望使用C ++编译器编译代码,则需要进行强制转换。
答案 1 :(得分:0)
指针数组与2D数组不是同一个字符串,即使它们用于获取值也是如此。为了能够交换字符串,您必须有一个指针数组。这是对您的代码的评论性快速修复,因为您距离它不远:
void Q5(){
char str[MAXL][MAXC]; // Ok a 2D array is nice to read the string
int i;
char* p[MAXL]; // the array of MAXL pointers
printf("Please enter %d Strings max length = %d\n",MAXL,MAXC);
for (i = 0; i < MAXL; i++){
scanf("%s", str[i]); // the string is read
p[i] = str[i]; // and the array of pointers is initialized
}
sort_String(p,MAXL);
printf("\n");
for (i = 0; i < MAXL; i++){
printf("%s", p[i]); // only p has been sorted, str is unchanged
printf("\n");
}
}
void sort_String(char** str,int size){ // takes an array of pointers as first parameter
char* tempP;
int i, j;
for (i=0; i < size;i++){ // ok for a bubble sort
for (j=i+1; j < size; j++){
if (strlen(str[i]) > strlen(str[j])){ // compare length of pointed strings
tempP = str[j]; // swap
str[j] = str[i];
str[i] = tempP;
}
}
}
我认为MAXL
和MAXC
都是常数值(#define
)