字符串指针数组问题,编一个程序,谢谢

字符串指针数组问题,编一个程序,谢谢,第1张

#include <stdioh>

#include <string>

void swap(char src, char dest)//交换值

{

char tmp = src;

src = dest;

dest = tmp;

}void main()

{

char cID[5] = {"201011110001", "201011110505", "201011110503", "201011110504", "201011110502"};

char cName[5] = {"甲", "乙", "丙", "丁", "戊"};

printf("排序之前: \n");

for (int i=0; i<5; i++)

{

printf("%s %s\n", cName[i], cID[i]);

}

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

{

for (int j=i+1; j<5; j++)

{

if (strcmp( (const char )cID[i], (const char )cID[j]) > 0)

{

swap(&cID[i], &cID[j]);

swap(&cName[i], &cName[j]);

}

}

}

printf("学号排序: \n");

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

{

printf("%s %s\n", cName[i], cID[i]);

}

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

{

for (int j=i+1; j<5; j++)

{

if (strcmp( (const char )cName[i], (const char )cName[j]) > 0)

{

swap(&cID[i], &cID[j]);

swap(&cName[i], &cName[j]);

}

}

} printf("姓名排序: \n");

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

{

printf("%s %s\n", cName[i], cID[i]);

}

}

这个不复杂,但得说清楚是长度升序还是大小升序?

#include "stdioh"

#include <stringh>

void lenup(char p[]){

char i,j,k,t;

for(i=0;i<9;i++){

for(k=i,j=k+1;j<10;j++)

if(strlen(p[k])>strlen(p[j]))

k=j;

if(k-i)

t=p[k],p[k]=p[i],p[i]=t;

}

}

void valueup(char p[]){

char i,j,k,t;

for(i=0;i<9;i++){

for(k=i,j=k+1;j<10;j++)

if(strcmp(p[k],p[j])==1)

k=j;

if(k-i)

t=p[k],p[k]=p[i],p[i]=t;

}

}

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

char a[10][30]={"12345","3216","213","abcde","cba","6bca","12a","b23c","3c124","4d5"};

char p[10],i;

for(i=0;i<10;p[i++]=a[i]);

printf("按长度升序排序:\n");

lenup(p);

for(i=0;i<10;printf("%s ",p[i++]));//按长短升序结果

printf("\n按大小升序排序\n");

valueup(p);

for(i=0;i<10;printf("%s ",p[i++]));//按大小升序结果

printf("\n");

return 0;

}

运行结果:

按你的要求选一个……

第一题你好象写错了;

#include

<iostream>

using

namespace

std;

int

main()

{

char

str[]="xyz",ps;

ps=str;

while(ps)

ps++;

for(ps--;ps-str>=0;ps--)

putchar(ps);

return

0;

}

ps=str是正确的,因为你的ps在上边定义的是一个指针。那么下边的赋值运算中就应该是地址之间的传递,str作为数组名,它本身就是一个地址。同时ps也是一个指针。结果就是

xyz

第二题的答案是:

4

5

因为作为形式参数的b在传递到你的调用函数f之后虽然做了++ *** 作但是这个b却只是一个副本,不是真正的b,等这个f函数执行完毕之后就会把这个副本释放掉,对主函数的b并不产生影响。要想修改主函数中的数值,在传递参数的时候只有传递指针,就像你的a那样,给函数传递一个指针就可以。

第三题答案是17

这个题就是把这个数组中的所有奇数项想加

第四题

答案是24

就是把所有偶数的元素都设置成

第五题就是

2

5

8

10

0

整个题目就是把a[4]=a[0]+a[1]+a[2]+a[3]+a[4]

#include<stdioh>

int main()

{

int a[111],max,min,p,n,k=0;

p=a;//指针p指向数组a首地址

do{

scanf("%d",&n);

p[k++]=n;

}while(getchar()!='\n');

max=min=p[0];

for(p=a;p<a+k;p++)

{

if(p>max)

max=p;

if(p<min)

min=p;

}

printf("max=%d,min=%d",max,min);

return 0;

}

第一个问题:

这里,p存的是二维数组str的首元素的首地址,也就是指向str[0][0]。

p是个char

,即指向的对象存的是char类型,所以p+10就是从p指向的位置str[0][0]向后移动了10个char单位。

二维数组定义为str[][10],可以看做是n个一维数组,每个一维数组有10个字符。这里初始化的时候将第一个一维数组初始化为"China",第二个初始化为"Beijing",所以P+10向后移动10个单位后,p就指向了‘B’,所以输出为Beijing。

比如这里不是p+10,而是p+3,那么就向后移动了3个char,指向了‘n’,此时输出就为na。

第二个问题:

首先,要搞清楚,char

p[10]是什么,由于[

]的优先级比高,故p是先和[

]组合,

所以,这里char

p[10]其实是定义了一个指针数组,p是个数组,数组的每个元素都是一个指向char类型的指针,这里定义的时候进行了初始化,将10个指针分别指向了那几个字符串,

char

ptr

=

"abcde";

这个应该理解吧,就是将一个指针指向一个字符串,

char

p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};一样,不过是定义了10个指针,这10个指针是个数组,每个指针指向一个字符串。

所以p[4]就是指数组的第5个元素,它也是个指针,指向字符串"cd",所以strlen(p[4])=2

以上就是关于字符串指针数组问题,编一个程序,谢谢全部的内容,包括:字符串指针数组问题,编一个程序,谢谢、用C语言编程序:用指针数组处理:在主函数中放10个不等长的字符串(12345 3216 213 a、C语言 指针与数组 求程序输出结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9402168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存