大概问题是 输入几个字符串 通过递归的方式给这几个字符串按字典顺序排序
最让我头疼的是它程序里先是申请了一个二维字符数组 作为参数传给一个专门输入字符串的子函数 返回之后又申请了一个字符串指针数组也就是char*a[]然后把这个字符串指针数组传进递归比较的函数里
```c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char** change(char **a,int n){
if(n==1)
return a; //递归返回条件(存疑点1)(不确定是否正确)
else{
char*b;
int i,j;
for(i=0;i<n-2;i++){
if(strcmp(a[i],a[i+1])>0) //找出整组字符串里最大的一个
j=i;
}
b=a[n-1];
strcpy(a[n-1],a[j]); //把最大的字符串放到末尾
strcpy(a[j],b);
change(a,n-1); //再传入字符指针数组变短
}
}
char** input(char **a,int n){
int i;
for(i=0;i<n;i++){ //(存疑点2)gets不知道对不对 也不知道用不用getchar()
scanf("%s",a[i]);
}
return a;
}
int main(){
int n;
scanf("%d",&n);
char**m; //二维数组
m=(char**)malloc(sizeof(char*)*n); //动态申请空间
int i,j,k;
for(i=0;i<n;i++){
m[i]=(char*)malloc(sizeof(char)*100);
}
m=input(m,n);
char**a;
a=(char**)malloc(sizeof(char*)*n);//字符串指针数组
for(i=0;i<n;i++){ //不知道怎样把二维数组传进字符串指针数组
a[i]=&m[i][100];
}
a=change(a,n); //完全不知道该怎么用
for(i=0;i<n;i++){
puts(m[i]);
}
}
它运行不出东西
传参和返回值 还有那个二维数组和字符串指针数组我完全不知道怎么用
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void change(char **a,int n) {
if(n==1)
return ; //递归返回条件(存疑点1)(不确定是否正确)
else {
char*b;
int i,j;
for(i=0; i<n-2; i++) {
if(strcmp(a[i],a[i+1])>0) //找出整组字符串里最大的一个
j=i;
}
b=a[n-1];
strcpy(a[n-1],a[j]); //把最大的字符串放到末尾
strcpy(a[j],b);
change(a,n-1); //再传入字符指针数组变短
}
}
void input(char **a,int n) {
int i;
for(i=0; i<n; i++) { //(存疑点2)gets不知道对不对 也不知道用不用getchar()
scanf("%s",a[i]);
}
//return a;
}
int main() {
int n;
scanf("%d",&n);
char**m; //二维数组
m=(char**)malloc(sizeof(char*)*n); //动态申请空间
int i,j,k;
for(i=0; i<n; i++) {
m[i]=(char*)malloc(sizeof(char)*100);
}
input(m,n);
change(m,n);
/* char**a;
a=(char**)malloc(sizeof(char*)*n);//字符串指针数组
for(i=0; i<n; i++) { //不知道怎样把二维数组传进字符串指针数组
a[i]=&m[i][100];
}*/
// a=change(a,n); //完全不知道该怎么用
for(i=0; i<n; i++) {
puts(m[i]);
}
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void change(char **a,int n) {
if(n==1); //递归返回条件(存疑点1)(不确定是否正确)
else {
char*b;
int i,j;
for(i=0; i<n-2; i++) {
if(strcmp(a[i],a[i+1])>0) //找出整组字符串里最大的一个
j=i;
}
b=a[n-1];
strcpy(a[n-1],a[j]); //把最大的字符串放到末尾
strcpy(a[j],b);
change(a,n-1); //再传入字符指针数组变短
}
}
void input(char **a,int n) {
int i;
for(i=0; i<n; i++) { //(存疑点2)gets不知道对不对 也不知道用不用getchar()
gets(a[i]);
}
//return a;
}
int main() {
int n;
scanf("%d",&n);
char**m; //二维数组
m=(char**)malloc(sizeof(char*)*n); //动态申请空间
int i,j,k;
for(i=0; i<n; i++) {
m[i]=(char*)malloc(sizeof(char)*100);
}
input(m,n);
change(m,n);
/* char**a;
a=(char**)malloc(sizeof(char*)*n);//字符串指针数组
for(i=0; i<n; i++) { //不知道怎样把二维数组传进字符串指针数组
a[i]=&m[i][100];
}*/
// a=change(a,n); //完全不知道该怎么用
for(i=0; i<n; i++) {
printf("%s",m[i]);
}
return 0;
}
非常非常感谢您的帮助
然后我还是想问问那个字符指针数组怎么用 我们学校考试他考这个东西。。