编写一个程序,用一个字符串指针数组存放若干城市名

编写一个程序,用一个字符串指针数组存放若干城市名,第1张

#include<stdioh>

#include<stringh>

void main()

{

char address[]={"重庆市","北京市","天津市","广东省","广西省","福建省","河北省","云南省"};

char city[50];

char p=address;

int i=0,index=0,count=0;

printf("请输入你要查找的城市名:");

gets(city);

for(;i<sizeof(address) / sizeof(address[0]);i++,p++)

{

if(strcmp(p,city)==0)

{

printf("你要查找的城市是:%s,在数组中排在第%d。\n",p,i+1);

}

else

index++;

}

if(index==sizeof(address) / sizeof(address[0]))

printf("在数组中没有找到:%s\n",city);

}

第一个问题:

这里,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

#include<iostreamh>

#include<stdlibh>

void main()

{

int i,n,p;

cout<<"请输入集合A的元素个数:"<<endl;

cin>>n;

cout<<"请输入集合A的元素:"<<endl;

p=(int)malloc(sizeof(int)n);

cout<<"请输入第一个数:";

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

{

// cin>>p;

// cout<<"第"<<i+1<<"个数是:"<<p+i<<endl;

cin>>(p+i); //解引用, 指针后移

cout<<"第"<<i+1<<"个数是:"<<(p+i)<<endl; //解引用, 指针后移

}

cout<<"您输入的集合A为:"<<"A={";

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

{

// cout<<i<<',';

cout<<(p+i)<<','; //解引用,指针后移

}

cout<<'}'<<endl;

free(p); //释放p

p = NULL;

}

或者:

#include<iostreamh>

#include<stdlibh>

void main()

{

int i,n,p;

int init = NULL;

cout<<"请输入集合A的元素个数:"<<endl;

cin>>n;

cout<<"请输入集合A的元素:"<<endl;

p=(int)malloc(sizeof(int)n);

cout<<"请输入第一个数:";

init = p;

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

{

cin>>p; //解引用, 指针后移

cout<<"第"<<i+1<<"个数是:"<<p<<endl; //解引用, 指针后移

p++;

}

p = init;

cout<<"您输入的集合A为:"<<"A={";

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

{

cout<<p++<<','; //解引用,指针后移

}

cout<<'}'<<endl;

p = init; //如果不恢复,free(p)将不是释放p申请的地址,或者free(p)也可写成free(init);

free(p);//释放p

p = NULL;

init = NULL;

}

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

#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 <stdioh>

main()

{

static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/ 定义二维数组m并初始化/

int (p)[4];//数组指针 p是指针,指向一维数组,每个一维数组有4个int元素

int i,j;

int q[3];//指针数组 q是数组,数组元素是指针,3个int指针

p=m; //p是指针,可以直接指向二维数组

printf("--数组指针输出元素--/n");

for(i=0;i<3;i++)/输出二维数组中各个元素的数值/

{

for(j=0;j<4;j++)

{

printf("%3d ",((p+i)+j));

}

printf("/n");

}

printf("/n");

for(i=0;i<3;i++,p++)//p可看成是行指针

{

printf("%3d ",p);//每一行的第一个元素

printf("%3d ",(p+1));//每一行的第二个元素

printf("%3d ",(p+2));//每一行的第三个元素

printf("%3d ",(p+3));//每一行的第四个元素

printf("/n");

}

printf("/n");

printf("--指针数组输出元素--/n");

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

q[i]=m[i];//q是数组,元素q[i]是指针

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

{

for(j=0;j<4;j++)

{

printf("%3d ",q[i][j]);//q[i][j]可换成(q[i]+j)

}

printf("/n");

}

printf("/n");

q[0]=m[0];

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

{

for(j=0;j<4;j++)

{

printf("%3d ",(q[0]+j+4i));

}

printf("/n");

}

printf("/n");

}

哥们!建议你写完一个程序之后如果编译器报错!先认真的看一遍!

一些很明显的错误可以很容易的发现的!例如你的i应该是<2;

而不是24!

j应该是<3而不是小于5;

不然你的指针都指到数组外面去了!

还有你声明的p的类型是int;

a的类型是int;

他们是不能直接赋值的!

可以改为 p=a[0]; 或者你直接定义int p;

吧p定义成二级指针也可以!

帮你把代码修改如下!

#include<iostream>

using namespace std;

void main()

{

int p;

int a[2][3];

int q=0;

p=a[0];

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

for(int j=0;j<3;j++)

{

q+=1;

(p+3i+j)=q;

}

for(int k=0;k<6;k++)

cout<<(p+k)<<endl;

}

输出 数组的值为:

1

2

3

4

5

6

以上就是关于编写一个程序,用一个字符串指针数组存放若干城市名全部的内容,包括:编写一个程序,用一个字符串指针数组存放若干城市名、看这2个C程序,关于指针和数组的、C++中指针数组如何赋值这个程序还请亲们给帮忙解决下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存