Processing math: 100%
NOIP学习小站
西安交通大学附属中学航天学校

字符串例题——字符串数组

问题:输入n1 \le n \le 1000)位小组成员姓名(姓名中只有英文字符,每个姓名不超过10个字符),逆序输出所有姓名。

分析:使用string数组存储所有成员姓名,然后逆序输出数组中的string即可。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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数组的每一行是一个字符串(一位成员的姓名)。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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函数输入姓名。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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<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<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; 
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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; 
}

登录

注册