字符串及相关练习
三角形输出
给定一个层数n,输出字母三角形
输入格式
输入一个整数n(0< n≤26),表示字母三角形的层数。
输出格式
按照题目描述,输出字母三角形。
样例输入:
2
样例输出:
A
BBB
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;//输入层数
for(int i=1;i<=n;i++){
string space=string(n-i,' ');
string ch=string(2*i-1,'A'+i-1);
cout<<space+ch<<endl;
}
return 0;
}
2.升级版三角形
输入格式
输入一个数字(1-9)或者一个大写字母(A-Z)。
输出格式
按照题目描述,输出对应的三角形。
样例输入1
F
样例输出1
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
样例输入2
4
样例输出2
1
121
12321
1234321
#include<bits/stdc++.h>
using namespace std;
int main()
{
char c,c1,c2;
cin>>c;
if(c>='A'&&c<='Z')//输入为字母
{
int n = c-'A'+1;
for(int i = 1; i <= n; i++)
{
for(int k = 1; k <=n-i; k++)
{
cout<<" ";
}
for(int j = 1; j <= i; j++)
{
c1 = char('A'+j-1);//前半句
cout<<c1;
}
for(int m = i-1; m >=1; m--)
{
c2 = char('A'+m-1);//后半句
cout<<c2;
}
cout<<endl;
}
}else{//输入为数字
int n = c - '0';
for(int i = 1; i <= n; i++)
{
for(int k = 1; k <=n-i; k++)
{
cout<<" ";
}
for(int j = 1; j <= i; j++)
{
cout<<j;
}
for(int m = i-1; m >=1; m--)
{
cout<<m;
}
cout<<endl;
}
}
return 0;
}
3.造房子
样例输入1
2 2
样例输出1
+-+-+
|||
+-+-+
|||
+-+-+
样例输入2
3 4
样例输出2
+-+-+-+-+
|||||
+-+-+-+-+
|||||
+-+-+-+-+
|||||
+-+-+-+-+
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++){
cout<<"+-" ;
}
cout<<'+'<<endl;
for(int j=0;j<b;j++){
cout<<"|*";
}
cout<<"|"<<endl;
}
for(int j=0;j<b;j++){
cout<<"+-" ;
}
cout<<"+"<<endl;
return 0;
}
*4.对称字符串
问题描述
蒜头君认为对称是一种美,他希望任何东西都是对称的,连字符串都是不放过。蒜头君在沙盘上写了这样一些字符串:
A1: A
A2:ABA
A3:ABACABA
A4:ABACABADABACABA
…
对于给定的N,你能根据规律输出A(N)吗?
输入格式
仅有一个数:N(N<=20)。
输出格式
所在字母组成的图形
样例输入1:2
样例输出1:ABA
样例输入2:3
样例输出2:ABACABA
#include
#include
using namespace std;
char ans[5000000];
int main(){
int n;
cin>>n;
len = 0;
for (int i = 1; i <= n; ++i){
strcat(ans + len + 1, ans);
ans[len] = 'A' + i - 1;
len = strlen(ans);
}
cout<<ans;
return 0;
}
5.寻找字符串
#include<bits/stdc++.h>
using namespace std;
char s1[1005],s2[1005];//定义
int main()
{
gets(s1);//输入两个字符串
gets(s2);
int len1=strlen(s1)-1,len2=strlen(s2)-1;//记录两个字符串的长度
int ans=0;
for(int i=0;i+len2-1<len1;i++)
{
bool matched = true;//标记为真
for(int j=0;j<len2;j++)
{
if(s1[i+j]!=s2[j]){
matched=false;
break;
}
}
if(matched){//如果为真加一
ans++;
}
}
cout<<ans<<endl;
}
6.字符串中A的数量
#include<bits/stdc++.h>
using namespace std;
char s[105];
int main(){
int len,cnt=0;
scanf("%s",s);
len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='A'){
cnt++;
}
}
printf("%d\n",cnt);
return 0;
}
7.最长的名字
#include<bits/stdc++.h>
using namespace std;
char s[105],ans[105];
int anslen;
int main(){
int N,len;
cin>>N;
for(int i=0;i<N;i++){
scanf("%s",s);
len=strlen(s);
if(len>anslen){
anslen=len;
strcpy(ans,s);
}
}
printf("%s\n",ans);
return 0;
}
8.字符串
#include<bits/stdc++.h>
using namespace std;
char s[1005];
int anslen;
int main(){
int len;
cin>>s;
len=strlen(s);
for(int i=0;i<len;i++)
{
if(s[i]=='z'){
s[i]='a';
}else if(s[i]=='Z'){
s[i]='A';
}else if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z'){
s[i]++;
}
}
cout<<s;
return 0;
}
9.大数的奇偶性判断
#include<bits/stdc++.h>
using namespace std;
char s[10005];
int main(){
int len;
scanf("%s",s);
len=strlen(s);
if((s[len-1]-'0')%2==0){
cout<<"YES\n";
}else{
cout<<"NO\n";
}
return 0;
}
*10.最后一个单词
#include <bits/stdc++.h>
using namespace std;
int main(){
char s[10005];
gets(s);//输入字符串
int len = strlen(s);//求总长
int num = 0;
for(int i = len-1; i >= 0; i--){//从后往前
if(s[i] !== ' ')
{
len--;
}
else
break;
}
for(int i = 0; i < len; i++){
if(s[i] != ' '){
num++;
}
else num = 0;
}
cout << num << endl;
return 0;
}
11.十字图
#include
using namespace std;
const int MAX=130; //需设置为大于5+4*30的数
bool map[MAX][MAX];
void print(int n)
{
//通过n计算出打印十字图的规格(N*N)
int N=5+4*n;
//首先标记最内层的十字架
for(int i=N/2-1;i<=N/2+3;i++)
map[N/2+1][i]=map[i][N/2+1]=true; //一横一竖
//然后从最外层到里层逐个标记十字架
for(int i=1;i<=n;i++)
{
//接下来标记四个边角部分
int x=2i+1,y=2i+1;
//左上边角
map[x][y]=map[x][y-1]=map[x-1][y]=true;
//右上边角
y=N-2*i;
map[x][y]=map[x][y+1]=map[x-1][y]=true;
//右下边角
x=N-2*i;
map[x][y]=map[x][y+1]=map[x+1][y]=true;
//左下边角
y=2*i+1;
map[x][y]=map[x][y-1]=map[x+1][y]=true;
//接下来标记十字架的非边角部位(即“四个墙壁”)
for(int j=2i+1;j<=N-2i;j++)
map[2i-1][j]=map[j][N-2(i-1)]=map[N-2*(i-1)][j]=map[j][2*i-1]=true;
}
//打印
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)
if(map[i][j]) cout<<"$";
else cout<<".";
cout<<endl;
}
}
int main()
{
int n;
cin>>n;
print(n);
return 0;
}
