一些关于指针的小问题,程序实现从键盘输入字符串并比较大小

#include
#include

#define N 4

void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);

int i;
char *string[N];
 //You are so handsome!  You are the Good boy!   I am so hot now!  I love you!
for( i=0; i < N; i++)
{
    scanf("%s", &string[i]);
}

sort(string, N);
print(string, N);

}

void sort(char *name[], int n)
{
char *temp;
int i, j, k;

for(i=0; i < n-1; i++)
{
    k = i;

    for(j = i+1; j < n; j++)   
    {
        if( strcmp(name[k], name[j]) > 0)     //当name[k] > name[j]时,结果为正数
        {
            k = j;
        }
        if(k != i)
        {
            temp = name[i];
            name[i] = name[k];
            name[k] = temp;
        }
    }
}

}

void print(char *name[], int n)
{
int i;

for(i=0; i < n; i++)
{
    printf("%s\n", *(name + i) );
}

}


5个回答

楼主根据我说的这两个错误点去重新修改下代码就可以了;若实在写不出来我再给你答案,楼主加油!

```#include
#include
#include
#define N 4
void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
int i;
char *string[N];
//定义了一个指针数组,应该初始化,因为里面存放的是每个字符串的地址,不是存放整个字符串
//的内容;错误1
//You are so handsome! You are the Good boy! I am so hot now! I love you!
for( i=0; i < N; i++)
{
scanf("%s", string[i]);
}

sort(string, N);

print(string, N);

}

void sort(char *name[], int n)
{
char *temp;
int i, j,k;
}
for(i=0; i < n-1; i++)
{
k = i;

    for(j = i+1; j < n; j++)   
    {
        if( strcmp(name[k], name[j]) > 0)     //当name[k] > name[j]时,结果为正数
        {
            //strcmp函数是用来比较字符串大小的,因此,没有必要去一个个字符比较
            //若比较单个字符大小,直接比较就可以了, 因为int和char可以转换,
            //这是错误2
            k = j;
        }
        if(k != i)
        {
            temp = name[i];
            name[i] = name[k];
            name[k] = temp;
        }
    }
}

}

void print(char *name[], int n)
{
int i;
for(i=0; i < n; i++)
{
printf("%s\n", *(name + i) );
}
}


CalledJoker
老衲呢 还要麻烦您进一步的指点。
接近 3 年之前 回复

小白刚入门求指点,,,,,运行就停止了。

有没有大神在看???
求指点啊啊啊啊啊啊啊啊啊啊啊

初始化部分改为:
 char *string[N]={"You are so handsome!","You are the Good boy!",
        " I am so hot now!","I love you!"};

        比较部分重新写以下,就可以了;
CalledJoker
老衲呢 是这样子的确可以实现 ,但是已经偏离题目了
接近 3 年之前 回复
楼主,你好,代码已经改好!
#include <string.h>
#include<stdlib.h>
#include <stdio.h>
#define N 4
int main()
{
    void sort(char *name[], int n);
    void print(char **name, int n);
    char *string[N]={"You are so handsome!!","You are the Good boy!",
        "  I am so hot now!","I love you!"};
    //You are so handsome!  You are the Good boy!   I am so hot now!  I love you!
    sort(string, N);
    print(string, N);
    system("pause");
    return 0;
}


void sort(char **p,int n)
{
    int i,j;
    for (i=0;i<n-1;++i)
    {
        for (j=i+1;j<n;j++)
        {
            if (strcmp(p[i],p[j])>0)
            {
                char *temp = NULL;
                temp = p[i];
                p[i] = p[j];
                p[j] = temp;
            }
        }
    }
}


void print(char *name[], int n)
{
    int i;
    for(i=0; i < n; i++)
    {
        printf("%s\n", *(name + i) );
    }
}

CalledJoker
老衲呢 需要从键盘自行输入字符串然后进行比较大小,
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问