问题:输入\(n\)(\(1 \le n \le 1000\))位小组成员姓名(姓名中只有英文字符,每个姓名不超过10个字符),逆序输出所有姓名。
分析:使用string数组存储所有成员姓名,然后逆序输出数组中的string即可。
#include<iostream> #include<string> using namespace std; string names[1000]; int main() { int n; cin>>n; for(int i=0;i<n;i++){ cin>>names[i]; } for(int i=n-1;i>=0;i--){ cout<<names[i]<<endl; } return 0; }
此外,如果用字符数组存储所有姓名,需要使用二维数组。此时二维char数组的每一行是一个字符串(一位成员的姓名)。
#include<iostream> #include<cstring> using namespace std; char names[1000][15]; int main() { int n,len; cin>>n; for(int i=0;i<n;i++){ //names[i]是二维char数组的第i行,用来存储一个字符串 cin>>names[i]; } for(int i=n-1;i>=0;i--){ cout<<names[i]<<endl; } return 0; }
问题变形:输入的姓名中可以出现空格。结合前面小节的内容可知,如果使用string存储姓名,那么需要用getline函数输入姓名;如果使用char数组存储姓名,那么可以使用fgets函数输入姓名。
#include<iostream> #include<string> using namespace std; string names[1000]; int main() { int n; cin>>n; getchar(); //不要忘了这一句,否则后面输入字符串会出现异常 for(int i=0;i<n;i++){ getline(cin,names[i]); } for(int i=n-1;i>=0;i--){ cout<<names[i]<<endl; } return 0; }
#include<iostream> #include<cstring> using namespace std; char names[1000][15]; int main() { int n,len; cin>>n; getchar(); //不要忘了这一句,否则后面输入字符串会出现异常 for(int i=0;i<n;i++){ //names[i]是二维char数组的第i行,用来存储一个字符串 fgets(names[i],sizeof(names[i]),stdin); int len = strlen(names[i]); //处理末尾可能额外附带的'\n' if(len && names[i][len-1]=='\n') names[i][--len] = '\0'; } for(int i=n-1;i>=0;i--){ cout<<names[i]<<endl; } return 0; }