数据结构基础--指针数组
题目
Description
已知每个月份的英文单词如下,要求创建一个指针数组,数组中的每个指针指向一个月份的英文字符串,要求根据输入的月份数字输出相应的英文单词
1月 January
2月 February
3月 March
4月 April
5月 May
6月 June
7月 July
8月 Aguest
9月 September
10月 October
11月 November
12月 December
Input
第一行输入t表示t个测试实例
接着每行输入一个月份的数字
依次输入t行
Output
每行输出相应的月份的字符串,若没有这个月份的单词,输出error
Sample Input
3
5
11
15
Sample Output
May
November
error
题解
方法–指针数组是什么
指针有两种,分为数组指针与指针数组,该题目使用的是指针数组的方法。指针数组指的是指针的数组,即一个数组中每一个元素都是一个指针。写法是
#include<iostream>
int *p[n];
int a=1,b=1;
p[0]=&a;
p[1]=&b;
std::cout<<p[0]; //输出的是a的地址
std::cout<<p[1]; //输出的是b的地址
std::cout<<*p[0]; //输出的是a的值
int str[]={"Accept"};
p[2]=str; //p[2]指针指向str数组的首位地址
std::cout<<p[2]; //输出str数组的首位地址
std::cout<<*p[2]; //输出str数组首位元素
思路
在清楚指针数组的作用和意义之后,该题目就的思路就清晰了。
首先设立一个指针数组
int *p[20];
再设12个代表1月到12月的字符串数组,并让指针依次指向它们
char x1[]={"January"},x2[]={"February"},x3[]={"March"},x4[]={"April"},x5[]={"May"},x6[]={"June"},x7[]={"July"},x8[]={"Aguest"},x9[]={"September"},x10[]={"October"},x11[]={"November"},x12[]={"December"};
p[0]=x1,p[1]=x2,p[2]=x3,p[3]=x4,p[4]=x5,p[5]=x6,p[6]=x7,p[7]=x8,p[8]=x9,p[9]=x10,p[10]=x11,p[11]=x12;
在最后只需要输入想要的月份,然后对应地址输出就可以。不过要注意指针数组 p 存的是数组的首位地址,要输出整个字符串得输出所有地址存储的字符
while(n--)
{
cin>>x; //输入想要的月份为 x
if(x>=1 && x<=12)
{
while(*p[x-1])
{
cout<<*p[x-1]; //输出
p[x-1]++; // 用于访问下一位地址
}
putchar('\n');
}
else cout<<"error"<<endl;
}
这里使用的p[x-1]++是将访问地址由数组首位依次向后移动,从而访问整个数组。
代码
#include<iostream>
using namespace std;
int main()
{
char *p[15];
int n,x;
cin>>n;
char x1[]={"January"},x2[]={"February"},x3[]={"March"},x4[]={"April"},x5[]={"May"},x6[]={"June"},x7[]={"July"},x8[]={"Aguest"},x9[]={"September"},x10[]={"October"},x11[]={"November"},x12[]={"December"};
p[0]=x1,p[1]=x2,p[2]=x3,p[3]=x4,p[4]=x5,p[5]=x6,p[6]=x7,p[7]=x8,p[8]=x9,p[9]=x10,p[10]=x11,p[11]=x12;
while(n--)
{
cin>>x;
if(x>=1 && x<=12)
{
while(*p[x-1])
{
cout<<*p[x-1];
p[x-1]++;
}
putchar('\n');
}
else cout<<"error"<<endl;
}
return 0;
}