利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出?><div id=sug onselectstart=

作者&投稿:言连 (若有异议请与网页底部的电邮联系)
要求是fun函数的功能:利用指针数组对形参ss所指字符串数组中的字符串按由长到短顺序排列~

你是使用了选择排序法,所以k的值一定要给准确
for( j = i + 1; j < N ; j++)
if( strlen(ps[k]) < strlen(ps[i])) // 这永远不成立,因为k == i。(改: 不是i 应该是j)
k = j;
改为:if(strlen(ps[k])<strlen(ps[j])) k=j;

__1__ k=i ;从数组*ps[N]的第一个元素开始逐个选取
__2__ ps[k] ;这时k=i而j=i+1所以这里程序的作用是第一次运行前后两个数组元素比较字符串长度,而后接下来的元素逐个与较大的元素ps[k]比较大小,并总保持ps[k]是最长的。
__3__ ps[j] ; tp=ps[i]; ps[i]=ps[k]; ps[k]=ps[j];因为j=i+1所以将较长的字符串移到了ps[i],而较短的字符串移到了ps[j]。

#include <string.h>
#define N 5
#define M 8
void fun(char (*ss)[M])
{ char *ps[N],*tp; int i,j,k;
for(i=0; i<N; i++) ps[i]=ss[i];
for(i=0; i<N-1; i++) {
/**********found**********/
k= __1__ ; // ( i )
for(j=i+1; j<N; j++)
/**********found**********/
if(strlen(ps[k]) < strlen(__2__) ) k=j; // ( ps[j] )
/**********found**********/
tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; // ( tp )
}
printf("\nThe string after sorting by length:\n\n");
for(i=0; i<N; i++) puts(ps[i]);
}
main()
{ char ch[N][M]={"red","green","blue","yellow","black"};
int i;
printf("\nThe original string\n\n");
for(i=0;i<N;i++)puts(ch[i]); printf("\n");
fun(ch);
}


形参为指针(数组)和实参数组(形参)如何使用
k];a[k]=a[i];a[i]=t;} } } int main(){int x[LEN]={1,3,2};int i,*p;scrt(x);\/*以数组名作实参*\/ for(i=0;i<LEN;i++)printf("%3d",x[i]);printf("\\n");p=&x[0];scrt(p);\/*以指针作实参*\/ for(i=0;i<LEN;i++)printf("%3d",x[i]);} ...

c语言用指针数组对10个字符串排序(形参是如何影响原函数的?)
C里面的字符串最后都是以数0(也就是 '\\0'这个符号)来表示结尾的。计算字符串的长度的函数在头文件<string.h>已经提供了,也就是这个strlen(const char )。然后呢,就是表示字符串的数组了,在C里字符串虽然是数组实现的,但现在这个字符串数组的意思却是“由字符串组成的数组”,而不是“组成...

C语言的指针数组和函数实参和形参的值单传递问题
形参数组 是本质是指针 int a[5] ---void fun(int a[]);其实是 int a[5] ---void fun(int *a);char *name[]={"follow me","basic","great wall","fortran","computer design"};void sort(char *name[],int n)其实就是 char *name[]={"follow me","basic","great wa...

c语言 为什么选D
这个其实是因为:当数组名p传给指针形参s后,没有改变形参s指向的值(即*s的值,这其实就是字符数组p的第一个元素的值,数组p后面元素的值则是*(s+i),其中i是字符数组p的下标),而是改变了形参s存储的地址而已(s中存储的地址由main函数中数组p的首地址改为数组a的首地址),但main函数中输出的...

C语言中,用数组名作形参和用指针作形参有区别吗?
举个例子:(分别作为形参)int num[10], *p;p = num;\/\/此时p指向数组的第一个元素 我在主函数里调用两个函数 1 Sum(num);2 Sum(p+2,10);这就有区别了,因为num数组首地址它不能变化,但是此时p指向了数组的第三个元素,而且后面的那个10也是可以改变的,所以说用指针作为形参的时候要...

c语言规定,数组名做实参时,它和对应形参之间的数据传递方式是�_百 ...
c语言规定,数组名做实参时,它和对应形参之间的数据传递方式是 把实参数组的首地址单向传递给形参。

形参数组名作为指针变量来处理
是这样的百 首先指针变量所占内存单元均为4个字节,无论它指向的是什么类型 示例:include <stdio.h> void fun (int arr[]){ } int main(void){ int a[20];fun(a);return 0;} 请看,如果arr与a同为数度组,那么他应该占80个字节(20个元素,每个元素4个字节)可实回际上arr只占4个...

指针数组 作为参数传递
char *p="add";\/\/先在常量区放入"add",并将地址赋值给p a[1]=p;将p的值也就是常量字符串的地址赋值给a指向的数组中的第二个元素(元素类型是char *),这就改变了实参a数组中第二个元素指针的指向,它指向了常量区的"add"。由于此时a是个char *数组的地址副本,是局部变量,即形参,函数...

C语言中,指针数组作为主函数的形参整个过程怎么操作??以图片主函数为例...
对于主函数的参数, argc 和 argv可以说是在程序执行的时候传递的 其中:argc 指执行程序时命令参数的个数,argv 可以说是一个字符二级指针,也就是是字符串数组 如果执行命令如下:.\/a.out China BeiJing 则此时argc = 3;argv[0]的内容为 .\/a.out argv[1]的内容为 China argv[2]的内容为 ...

数组指针和指针数组怎样理解,当他们作为函数参数时,怎样调用的,求详解...
我印象里要把二维数组名作实参使用,形参只能写成数组指针,形参直接写成二维数组是不行的,void f( int [3][5]);这样声明会报错。也不能写void f( int** ); 因为int**和intint(*)[5]是不同的,前者做++只增4,后者增20。指针数组的实例:int*p[5]; 这样解释:p是个数组,数组有...

三明市19620358955: 利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出?><div id=sug onselectstart= -
熊燕二十: #include <string.h> #define N 5 #define M 8 void fun(char (*ss)[M]) { char *ps[N],*tp; int i,j,k; for(i=0; i<N; i++) ps[i]=ss[i]; for(i=0; i<N-1; i++) { /**********found**********/ k= __1__ ; // ( i ) for(j=i+1; j<N; j++) /**********found**********/ if(strlen(ps[k]) < strlen(_...

三明市19620358955: 要求是fun函数的功能:利用指针数组对形参ss所指字符串数组中的字符串按由长到短顺序排列
熊燕二十: 你是使用了选择排序法,所以k的值一定要给准确 for( j = i + 1; j &lt; N ; j++) if( strlen(ps[k]) &lt; strlen(ps[i])) // 这永远不成立,因为k == i.(改: 不是i 应该是j) k = j; 改为:if(strlen(ps[k])&lt;strlen(ps[j])) k=j;

三明市19620358955: c语言 将形参s所指字符串 放入形参a所指字符数组中,使a中存放同样的字符串. -
熊燕二十: 你fun中的while执行之后,s指针就已经被移到最后面了,当然不能继续下面的a[i]=s[i],这会导致a中的值是一些无意义的内容,要复制字符串方法很多,比如可以是 void fun( char *a , char *s) {while(*s)*a++=*s++;*a='\0'; }或者是 void fun(char ...

三明市19620358955: c++ sizeof用法 -
熊燕二十: 一、由几个例子说开去.第一个例子:char* ss = "0123456789"; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针 sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[] = "0123456789"; sizeof(ss) 结果 11 ===》ss是数组,计算到\0位...

三明市19620358955: 编写fun:在形参ss所指字符串数组中,将所有串长超过k的字符串中后面的字符删除,只保留前面的k个字符. -
熊燕二十: 将串长超过k的字符串中后面的字符删除,不是删除整个字符串. 那么这个要求就是字符串截断,字符串以字符'\0'结尾,因此称为结束符,无论符后面是什么内容,编译器都会忽略,因此只要在索引k位置的字符设置为0即可,后面的字符就被截断了. ss[i][k]='\0';就是将i行k列的字符设置为0,两个单引号包含起来的一个斜杠和一个0 代表值为0.多看看字符转义.

三明市19620358955: c语言中,ss在开始定义时不是定义了(*ss)[M],是个一维数组,怎么后来又变成ss[i][k],二维数组了? -
熊燕二十: char (*ss)[M],定义的这个ss指针,是一个指向一维字符数组的指针*ss 或 ss[0] 取的第0个字符数组*(ss+1) 或 ss[1] 取的是第1个字符数组(第0个数组后偏移M个字节) ss[i]因为是个字符数组,那 ss[i][k]就是这个数组中的元素,即字符了 fun函数,是在每个字符数组的,第k个位置上写个0,这样长度小于k的字符串没啥影响,长度大于k的字符串,就在k的位置上被截断了

三明市19620358955: 编写字符串的排序函数,函数形参要求用指针数组 -
熊燕二十: 供参考…… #include "stdafx.h" #include "string.h" #include "windows.h" #include "iostream.h" void strsort(char *p[],int x){char *temp;for(int j=0;j<x;j++)for(int i=j+1;i<x;i++)if(strcmp(p[j],p[i])>0){temp=p[i];p[i]=p[j];p[j]=temp;} }void ...

三明市19620358955: 编写一个函数,形参为指针,用指针引用数组元素,函数的功能是合并两个字符串
熊燕二十:char *s1=x; while(*s)s++; while(*y)*s++=*y++; *s=0;

三明市19620358955: c语言中将字符串用指针数组输入输出.. -
熊燕二十: #include <string.h> // for strlen strcpy strcmp#include <stdio.h> // for printf scanf#include <stdlib.h> // for malloc char *strs[2];#ifndef strdup char *strdup(const char *src) // strdup 不是标准库函数, 不过大多数编译器上有实现 { int len; char *tmp = ...

三明市19620358955: C语言指针数组做main函数形参
熊燕二十: 答案是:136 tt 12 345 678 tt.exe是程序的名字 后面带3个命令行参数(字符串类型的) main()函数中的 argc是参数的个数(int类型),也就是3个(12 345 678) argv是保存参数的二维字符数组 argv[0]指向程序路径: "tt.exe" argv[1]指向第一个参数:"12" argv[2]指向第二个参数:"345" argv[3]指向第三个参数:"678" 显然 *argv[1] = '1' *argv[2] = '3' *argv[3] = '6' 知道怎么算了吧

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