利用指针数组对多个字符串进行排序,中间用到 strcpy C语言编程题

作者&投稿:辕冉 (若有异议请与网页底部的电邮联系)
C语言用指针对多个字符串排序的问题~

if(strcmp(str[i],str[j]>0))写错了,应该是if(strcmp(str[i],str[j])>0)。
这函数排序对象是char *型指针,所以主调函数中应该是char *a[5]={"jf","ufdiso",...};这倦定义的指针数组,而不能是char a[][5]这种类型的二维数组——因为这样定义的数组名是常指针,不能另外赋值……举例如下:
#include "stdio.h"#include void sort(char *str[],int n){int i,j;char *p;for(i=0;i0)//你的代码这里写错了p=str[i],str[i]=str[j],str[j]=p;}int main(int argc,char *argv[]){char *a[5]={"12345","hfdjsk","ABCDE","iunvuu876","fff"};//这样定义//而不能char a[][5]...这样定义sort(a,5);printf("%s
%s
%s
%s
%s
",a[0],a[1],a[2],a[3],a[4]);return 0;}运行结果:

#define LINEMAX 20/*定义字符串的最大长度*/
int main()
{int i;
char**p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++)
pstr<i>=str<i>;/*将第i个字符串的首地址赋予指针数组pstr的第i个元素*/
printf("input 5 strings:
");
for(i=0;i<5;i++)
scanf("%s",pstr<i>);
p=pstr;
sort(p);
printf("strings sorted:
");
for(i=0;i<5;i++)
printf("%s
",pstr<i>);
}
sort(char**p)/*冒泡法对5个字符串排序函数*/
{int i,j;
char*temp;
for(i=0;i<5;i++)
{for(j=i+1;j<5;j++)
{if(strcmp(*(p+i),*(p+j))>0)/*比较后交换字符串地址*/
{temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
return 0;
}

扩展资料:printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
int a=1234;
printf("a=%d
",a);
输出结果为a=1234。
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include<stdio.h>。
int scanf(const char*restrict format,...);
函数scanf()是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
如:
scanf("%d%d",&a,&b);
函数返回值为int型,如果a和b都被成功读入,那么scanf的返回值就是2。

#include <stdio.h>
#include<string.h>
int main()
{
    char s[10][100];
    char *p[10];
    int i,j;
    char t[100];
    for(i = 0; i < 10; i ++)
    {
        p[i] = s[i];
        scanf("%s",p[i]);
    }
    for(i = 0; i < 9; i ++)
        for(j = i+1; j < 10; j ++)
            if(strcmp(p[i], p[j]) < 0)
            {
                strcpy(t, p[i]);
                strcpy(p[i], p[j]);
                strcpy(p[j], t);
            }
     for(i = 0; i < 10; i ++)   
         puts(p[i]);
    return 0; 
}

其实 用指针数组,完全没必要用strcpy的,用strcmp就足够了。 




#c语言#利用指针编写程序, 对具有10个元素的字符型数组,从下标为6的...
include <stdio.h>int main(){char s[10],*p=&s[6];gets(s);while(*p!=0)*(p++)='#';printf("%s",s);return 0;}

编程实现:使用指针,通过键盘输入给一个具有10个元素的整型数组赋值,然 ...
include <stdio.h> int main(){ int a[10],sum,*p;for(p=a,sum=0;p<a+10;++p){ scanf("%d",p);sum+=*p;} for(p=a;p

通过指针变量输出整型数组a的10个元素.
include <stdio.h> main(){ int a[10]={0,1,2,3,4,5,6,7,8,9};int* p=&a;\/\/ 这里要将指针指向数组第一个元素,也可以写成&a[0]for(i=0;i< 10;++i) \/\/n长度的数组有效域为0~n-1,这里改成++i这样汇编会将1直接加到存i变量的寄存器上运行更快 { printf("%d\\t",*(p+...

c语言数组不可以当成指针使用,但是指针可以当成数组使用吗?
可以 1.指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。2.数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。3.核心思想是通过...

指针能储存多个值吗? 可以把整个数组都储存到一个指针里面吗?
问这个问题,说明你根本还不知道什么是指针,一个指针只能存放一个地址,这个地址是一个数据在内存中的地址,因为数组里面的数据在内存中是连续存放的,所以用一个指针指向数组的首地址,要访问数组第二个元素,可以将指针后移一位,比如说 int iArray[10];int *p = iArray;(数组名即表示数组的首...

...问题:为什么用数组定义的字符串可以修改,而用指针定义的不能修改...
char *p="abcde";这种方式是定义了一个字符型指针,指向常量字符串"abcde"char p[]="abcde";这种方式是定义了一个字符数组,其长度自动设置其等于"abcde",所以第一种指向了常量区,无法修改;第二种定义了普通的数组变量,放在栈中,可以修改 ...

c语言什么时候使用数组,什么时候使用指针?
定义时,通常只有字符指针,和字符数组指针直接定义。用来表示字符串或字符串数组。其他一般定义数组。操作时用指针或数组。其他指针,多半用在参数传递,数据结构内部(不确定需要内存的大小,或者链表,二叉树等链式结构)的时候。还有一种是有些函数参数就是指针,这时定义一个指针,来操作传进来的指针...

C语言中的指针问题到底是怎么回事~
(3)int **ptr; \/\/指针所指向的的类型是 int * (4)int (*ptr)[3]; \/\/指针所指向的的类型是 int()[3] (5)int *(*ptr)[4]; \/\/指针所指向的的类型是 int *()[4] 在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C...

输入有限个字符串,先按字符串长度排序,若长度一样,再按字母顺序排序,并...
设允许输入10个字符串,长度限制为50个字符以内,用char型二维数组记载。另声明一个10个元素的char *型指针数组,使每个元素对应指向前述每个字符串,排序时只交换指针而不拷贝字符串。代码如下:include "stdio.h"#include "string.h"int main(int argc,char *argv[]){char s[10][51],*ps[10]...

用c语言编写程序,用一个字符指针数组存放宿舍所有同学的名字,并把他...
include <stdio.h> define ARR_SIZE 10 int main(){ char *names[ARR_SIZE]={"zhao1","qian2","sun3","li4","zhou5","wu6","zhen7","wang8","feng9","chen10"}; \/\/假定存放了这些姓名 int i,n;n = 10;for (i=0;i<n;i++) printf("%s\\n",names[i]); \/\/打...

滨城区17613109046: 利用指针数组实现对指定的多个字符串的从小到大或从大到小的排序 -
鲜柱水杨: ‍#include #include main() { char *px[6]={"jax","msld","lgd","miceal","scxhos","puck"}; char *p; char *temp; int i; for(i=0;i { p=*(px+i); printf("%s",p); printf("\t"); } printf("\n"); for(i=0;i{ if(strcmp(px[i],px[i+1])>0) { temp=px[i]; px[i]=...

滨城区17613109046: “用指向指针的方法对N个字符串排序并输出”的C语言程序怎么写? -
鲜柱水杨: 首先,定义一个指针数组,每个指针指向对应的字符串,然后,利用strlen函数判断字符串长度大小,然后排序,可以利用冒泡排序法.再利用for循环,输出字符串!

滨城区17613109046: 用指针数组对5个字符串排序并输出 -
鲜柱水杨: #include<stdio.h> #include<math.h> int main() { char s[5][10],*p[5],*t;int i,j;for(i=0; i<5; i++){ scanf("%s",s[i]);p[i]=s[i];}printf("=============\n");for(i=0; i<4; i++)for(j=0; j<4-i; j++)if(strcmp(p[j],p[j+1])>0){ t=p[j];p[j]=p[j+1];p[j+1]=t;}...

滨城区17613109046: 利用指针数组对多个字符串进行排序,中间用到 strcpy C语言编程题 -
鲜柱水杨: #include <stdio.h>#include<string.h> int main() { char s[10][100]; char *p[10]; int i,j; char t[100]; for(i = 0; i < 10; i ++) { p[i] = s[i]; scanf("%s",p[i]); } for(i = 0; i < 9; i ++) for(j = i+1; j < 10; j ++) if(strcmp(p[i], p[j]) < 0) { strcpy(t, p[i]); strcpy(p[i], p[j]); strcpy(...

滨城区17613109046: 利用指针编程序,将五个字符串从大到小排序后输出. -
鲜柱水杨: //交换 inline void swap(int& x, int& y) { int t = x; x = y; y = t; }//大到小排序 void sort(int* a, int n) { for (int i = n - 1; i >= 0; i--) { int min = i; for (int j = i - 1; j >= 0; j++) { if (a[j]{ min = j; } } swap(a[i], a[min]); } }//输出 int i = 0; while ( i

滨城区17613109046: 给任意三个字符串指针实现 并由小到大排列 -
鲜柱水杨: 可以使用三个数组,或者是一个二维数组来存储字符串,同时定义一个指针数组,指向三个字符串的首地址.然后对指针数组进行排序. 代码如下: #include <stdio.h> #include <string.h> int main() {char buf[3][100];char *p[3] = {buf[0],buf[1], buf...

滨城区17613109046: 输入10个字符串 对他们排序 然后输出 用指针数组解决 -
鲜柱水杨: 错误较多,已修改并调试,如下: #include"string.h" main() { char *p[10],*temp = NULL; //给个初值比较好 int i; int k; //二重循环 for(i=0;i<=9;i++) p[i] = new char [100]; //10个指针赋初值,开辟空间 for(i=0;i<=9;i++) scanf("%s",p[i]); for(i=0;i<...

滨城区17613109046: 编写C程序:用指针数组操作,将输入的5个字符串按从小到大的顺序输出 -
鲜柱水杨: // chapter7.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include <string.h> #include <ctype.h>void order(int * string) //把数组按从小到大排列,返该数组首地址 输入0结束 {int i,j,temp;int n = 0; //计算输入...

滨城区17613109046: 麻烦高手帮我编一个程序:用指针指向的方法对n个字符串排序并输出 -
鲜柱水杨: 可能提法有点问题,首先,指针是用来存放地址的,如果是想用*name[]这种概念直接存放多个字符串,必须要让指针数组要有指向,即初值,想直接存放不可能,道理很简单,根本不知道这些指针数组指向什么地址,怎么存放呢,所以我觉得...

滨城区17613109046: 用指向指针的指针的方法对5个字符串排序.. -
鲜柱水杨: 你这个问题首先要搞清楚几个关键性问题:1.指针数组和数组指针 char *p[5]这是一个数组,这个数组有5个元素,每个元素是一个指向字符串的指针,通常叫指针数组.char(*p)[5]这是一个指针,这个指针指向有5个字符的数组.所以你上面的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网