C语言要求通过键盘输入5字符串,再调用函数sort给字符串从小到大排列,再调用print函数完成字符串输出。

#include <stdio.h>
#include<string.h>
void sort(const char *name[],int n);
void print(char *name[ ],int n);
int main()
{
char *strs[5];
int i;
printf("Please input 5 strings:");
for(i=0;i<5;i++)
{
scanf("%s",&strs[i]);
}

printf("Output:\nAfter thestrings are storted the result:\n");
sort(strs,5);
print(strs,5);
return 0;
}
void sort(const char *name[],int n)
{
const char * temp;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(strcmp(name[j],name[j+1])>0)
{
temp=name[j];
name[j]=name[j+1];
name[j+1]=temp;
}
}
}
}
void print(char *name[ ],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n",name[i]);
}
}

我的代码有什么问题吗?输完字符串之后程序就崩了。。跪求大佬

看你代码原意,是想定义一个字符串数组strs。

但是你写的char *strs[5];表示的是一个维度为5的指针数组

你可以把strs直接改成字符串数组,char strs[5][N],但你后面的函数参数类型也要跟着改。

如果你不想改动其他函数,还继续使用指针数组,也是可以的。

你可以用动态内存来写输入部分:(头文件添加malloc.h)

#include <stdio.h>
#include <malloc.h>
#define N 100//每个字符串最大长度
int main()
{
    int i;
    char *strs[5];
    for(i=0;i<5;i++)
    {
        strs[i]=(char *)malloc(sizeof(char)*(N+1));
        if(strs[i])
            scanf("%s",strs[i]);
        else
        {
            printf("错误内存申请失败!\n");
            return 1;
        }
    }
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-16
#include <iostream>
#include <string>
using namespace std; //以上为引用头文件
int main() //主函数
{
int i; //创建变量i
string str[5]; //定义数组str
void sort(string s[]); //定义函数sort
cout<<"Please input string:"<<endl; //输出Please input string:
for(i=0;i<=5;i++)
cin>>str[i]; //输入5个字符串
sort(str); //调用str函数
cout<<"The sorted string is:"<<endl; //输出The sorted string is
for(i=0;i<5;i++)
cout<<str[i]<<" "; //输出已排列好的字符串
cout<<endl;
return 0;
}
void sort(string s[])
{
int i,j;
string temp;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(s[j]>s[j+1]) //对每个进行比较
{
temp=s[j];
s[j]=s[j+1];//把小的数放在前面
s[j+1]=temp;
}
}
第2个回答  2019-04-16
你没有为字符串分配空间,将main函数中的char *strs[5]修改为char strs[5][50];
第3个回答  2019-04-16
//修改后的代码:
#include <stdio.h>
#include<string.h>
void sort(char *name[],int n);
void print(char *name[ ],int n);
int main()
{ char *strs[5],s[5][20];
  int i;
  for(i=0;i<5;i++)
    strs[i]=s[i];
  printf("Please input 5 strings:");
  for(i=0; i<5; i++)
  { scanf("%s",strs[i]);
  }

  printf("Output:\nAfter thestrings are storted the result:\n");
  sort(strs,5);
  print(strs,5);
  return 0;
}
void sort(char *name[],int n)
{ char * temp;
  int i,j;
  for(i=0; i<n; i++)
  { for(j=0; j<n-i-1; j++)
    { if(strcmp(name[j],name[j+1])>0)
      { temp=name[j];
        name[j]=name[j+1];
        name[j+1]=temp;
      }
    }
  }
}
void print(char *name[ ],int n)
{ int i;
  for(i=0; i<n; i++)
  { printf("%s\n",name[i]);
  }
}

第4个回答  2019-04-16

简单修复了你的程序,有帮助请采纳哦。

#include <stdio.h>
#include<string.h>
const int CHANGDU = 50;
void sort(char name[][CHANGDU],int n);
void print(char name[ ][CHANGDU],int n);
int main()
{
    char strs[5][CHANGDU];
    int i;
    printf("Please input 5 strings:\n");
    for(i=0; i<5; i++)
    {
        scanf("%s",strs[i]);
    }
    printf("Output:\nAfter thestrings are storted the result:\n");
    sort(strs,5);
    print(strs,5);
    return 0;
}
void sort(char name[][CHANGDU],int n)
{
    char temp[CHANGDU];
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n-i-1; j++)
        {
            if(strcmp(name[j],name[j+1])>0)
            {
                strcpy(temp, name[j]);
                strcpy(name[j], name[j+1]);
                strcpy(name[j+1], temp);
            }
        }
    }
}
void print(char name[ ][CHANGDU],int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        printf("%s\n",name[i]);
    }
}