C语言 用指针方法 输入3个字符串 按由小到大顺序输出

我的程序编译连接都没问题,运行的时候 ,输入一个字符串,然后回车就报错,是哪里错了呢。。。。各位大神给看看。。。

#include "stdafx.h"
#include "stdio.h"
#include "string.h"

void order(char *p1,char *p2,char *p3)
{
char *t;
if(strcmp(p1,p2)>0)
{t=p1;p1=p2;p2=t;}

if(strcmp(p3,p1)>0)
{t=p1;p1=p3;p3=t;}

if(strcmp(p3,p2)>0)
{t=p2;p2=p3;p3=t;}
}

int main(int argc, char* argv[])
{

char *p1=NULL,*p2=NULL,*p3=NULL;
scanf("%s\n",p1);
fflush(stdin);

scanf("%s\n",p2);
fflush(stdin);

scanf("%s\n",p3);
fflush(stdin);

order(p1,p2,p3);

printf("%s\n%s\n%s\n",p1,p2,p3);

return 0;
}

可以使用三个数组,或者是一个二维数组来存储字符串,同时定义一个指针数组,指向三个字符串的首地址。然后对指针数组进行排序。

代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char buf[3][100];
    char *p[3] = {buf[0],buf[1], buf[2]};
    int i,j;
    
    for(i = 0; i < 3; i ++)
        scanf("%s", p[i]);//输入三个字符串。
    for(i = 0; i < 2; i ++)//排序。
        for(j = i+1; j < 3; j ++)
        {
            if(strcmp(p[i], p[j]) > 0)
            {
                char * t = p[i];
                p[i] = p[j];
                p[j] = t;
            }
        }
     for(i = 0; i < 3; i ++)
        printf("%s\n", p[i]);//输出排序后的三个字符串。
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-05-27

#include&lt;stdio.h&gt;

#include&lt;string.h&gt;

int main()

{

char str1[10],str2[20],str0[10];

printf("please input 3 strings");

gets(str1);

gets(str2);

gets(str0);

if(strcmp(str1,str2)&gt;0)swap(str1,str2);/*字符串比较函数*/

if(strcmp(str2,str0)&gt;0)swap(str2,str0);

if(strcmp(str1,str0)&gt;0)swap(str1,str0);

printf("Now the otrder is:")

printf("%s\n%s\n%s"\nstr1,str2,str0);

return 0;

}

void swap(char*p1,*p2)

{

char str[10];

strcpy(str,p1);

strcpy(p1,p2);

strcpy(p2,str);

}

扩展资料:

strcpy用法:

1、strcpy(a+1,b+2)相当于将a[1]及它后面的内容复制为b[2]及它后面的内容。b[2]及后面为“2”,因此复制后a为“a2”;

2、strcat(a,c+1)相当于在a的末尾加上c[1]及其后面的部分,也就是“yz”。故运行后a为“a2yz”

strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

strcat把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。

第2个回答  推荐于2017-09-01
指针没有分配空间可以使用吗?
定义指针是不分配空间的,在使用前你得初始化,让它指向确定的地址才可以后续使用。
函数中是没法更改传入变量指针地址的!但可以更改其中的内容.
你的比较好像有问题,得不到所需要的:“从小到大”
#include "stdio.h"
#include "string.h"
int main(int argc, char* argv[])
{
char *t;
char *p1=NULL,*p2=NULL,*p3=NULL;
char ch1[20]={0},ch2[20]={0},ch3[20]={0};

p1=ch1;
p2=ch2;
p3=ch3;

printf("No1:");
scanf("%s",p1);
fflush(stdin);
printf("No2:");
scanf("%s",p2);
fflush(stdin);
printf("No3:");
scanf("%s",p3);
fflush(stdin);

if(strcmp(p1,p2)>0)
{t=p1;p1=p2;p2=t;}

if(strcmp(p1,p3)>0)
{t=p1;p1=p3;p3=t;}

if(strcmp(p2,p3)>0)
{t=p2;p2=p3;p3=t;}

printf("%s\n%s\n%s\n",p1,p2,p3);

return 0;
}本回答被提问者采纳
第3个回答  2019-10-12

#include<stdio.h>

#include<string.h>

int main()

{ char s[3][101],*p1,*p2;

  int i;

  p1=p2=s[0];

  for(i=0;i<3;i++)

    gets(s[i]);

  if(strcmp(s[1],p1)>0)p1=s[1];

    else if(strcmp(s[1],p2)<0)p2=s[1];

  if(strcmp(s[2],p1)>0)p1=s[2];

    else if(strcmp(s[2],p2)<0)p2=s[2]; 

  printf("Max=%s\nMin=%s\n",p1,p2);

  return 0;

}

第4个回答  2012-03-15
char *p1=NULL,*p2=NULL,*p3=NULL;
p1,p2,p3都没有分配空间,所以不能存储数据。
scanf("%s\n",p1); //\n别放在这,这是输入,不是输出
if(strcmp(p1,p2)>0)
{t=p1;p1=p2;p2=t;} //字符串不能这样简单的交换,用strcpy,当然t也要分配空间

C语言 用指针方法 输入3个字符串 按由小到大顺序输出?
include <string.h> int main(){ void swap(char** p, char** q);char s1[100], s2[100], s3[100];char *p1, *p2, *p3;printf("please inter three strings:\\n");p1 = fgets(s1, 100, stdin);p2 = fgets(s2, 100, stdin);p3 = fgets(s3, 100, stdin);if (strcmp(p1, ...

C语言 用指针方法 输入3个字符串 按由小到大顺序输出
可以使用三个数组,或者是一个二维数组来存储字符串,同时定义一个指针数组,指向三个字符串的首地址。然后对指针数组进行排序。代码如下:include <stdio.h>#include <string.h>int main(){ char buf[3][100]; char *p[3] = {buf[0],buf[1], buf[2]}; int i,j; for(i ...

C语言,在C++环境下运行“输入3个字符串,按由小到大的顺序输出”用指针的...
} printf("按由小到大的顺序输出为:\\n");printf("%s\\n%s\\n%s\\n",s1,s2,s3);} 注意我把string.h去掉了,所以这里的strcpy,strcmp都是我自己写的,而不是库函数了。输入字符串的时候,是以空白字符为结束输入的。回车,空格都可以。不用特意输入‘\\0';另外楼主的程序可以实现,我测试过了。

输入3个字符串,按由小到大的顺序输出。(用指针方法处理)
这篇文章主要介绍了如何使用C语言中的指针方法,按照字符串的字典序,将用户输入的三个字符串str1、str2和str0按从小到大的顺序输出。首先,程序会提示用户输入三个字符串,然后通过strcmp函数进行比较,如果前一个字符串大于后一个,就使用swap函数交换它们的位置,这个过程重复三次,确保三个字符串的顺...

编写程序,输入3个字符串,比较它们的大小,并将它们按由小到大的顺序输 ...
1、首先打开vc6.0, 新建一个项目。 2、添加头文件。 3、添加main函数。 4、定义x, y, z, t。 5、使用scanf给定义的变量赋值。 6、使用printf输入。 7、运行程序,可以看到输入的3个字符串,比较它们的大小,并将它们按由小到大的顺序输出。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 推荐...

输入三个字符串,按从小到大的顺序输出(用指针处理)
1、新建一个工程和.c文件 ,输入头文件和主函数。2、声明函数,初始化数组,定义变量类型。3、调用函数。char* str="sample";int len = strlen(str)+1;har copystr[256];memcpy(copystr,str,len)。4、定义调用函数。5、输入调用函数体。DWORD dwNum;dwNum= WideCharToMultiByte(CP_OEMCP,NULL,...

c语言,求助大神! 从键盘上输入三个字符串,将这三个串从小到大排序。
C的字符串是用字符数组操作的,所以排序应该用指针数组完成,以避免字符串拷贝。由于只有3个字符串,用直接操作的办法而不用循环以避免不必要的开销;输入函数选用fgets,既可以方便地控制输入长度不越界,又能允许字符串中存在空格。代码如下:include "stdio.h"#include "string.h"int main(int argc,...

输入3个整数,按由小到大的顺序输出.(用指针实现)
\/\/三个都一样printf("请输入3个整数\\n");scanf("%d%d%d",pa,pb,pc);if(*pa>*pb){x=*pa;*pa=*pb;*pb=x;}if(*pa>*pc){x=*pa;*pa=*pc;*pc=x;}if(*pb>*pc){x=*pb;*pb=*pc;*pc=x;}printf("这3个数由小到大的排列顺序为%d,%d,%d",*pa,*pb,*pc);} ...

用指针编写C语言程序输入a,b,c三个数按从小到大顺序输出的流程图
include<stdio.h> void main(void){ float x[3],*p=x;printf("请输入三个数\\n");for(int i=0;i<3;i++)\/\/键盘接收数据 { printf("第%d个数:",i+1);scanf("%f",p++);} for(i=0;i<2;i++)\/\/冒泡法排序 { p=x;for(int j=0;j<2-i;j++,p++)if(*p>*(p+1)){...

C语言如何从键盘输入任意3个数,按从小到大的顺序输出?
输入3个字符串,按从小到大顺序输出。 \/\/先用程序对三个数进行从小到大排序,然后修改程序#include<stdio.h>#include<string.h>int main(){void swap(char *pt1,char *pt2); char a[20],b[20],c[20]; char *p1,*p2,*p3; printf("请输入三个字符串:"); gets(a); gets(b); ...

相似回答