子串查找
题目描述
输入2个字符串A和B(不含空格),请你找到B在A中的位置
输入
输入两行,分别是字符串A和B(A中一定包含B)
输出
输出B在A中第一次出现的位置。
样例
输入复制
cometohereilike
to
输出复制
5
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[1000];
char b[1000];
int la;
int lb;
cin.getline(a,1000);
cin.getline(b,1000);
la = strlen(a);
lb = strlen(b);
for(int i = 0;i<=la-lb;i++)
{
bool f = true;
for(int j = 0;j<lb;j++)
{
if(a[i+j]!=b[j])
{
f = false;
break;
}
}
if(f==true)
{
cout<<i+1;
return 0;
}
}
return 0;
}
子串替换
题目描述
输入3个字符串A、B、C(ABC含空格),请你在A中找到首个B,用C替换
输入
输入3行,分别是字符串A、B、C(A中一定包含B)
输出
输出替换后的字符串
样例
输入复制
I like football
like
very love
输出复制
I very love football
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[1000];
char b[1000];
char c[1000];
int la;
int lb;
int lc;
int p;
cin.getline(a,1000);
cin.getline(b,1000);
cin.getline(c,1000);
la = strlen(a);
lb = strlen(b);
lc = strlen(c);
p = 0;
for(int i = 0;i<=la-lb;i++)
{
bool f = true;
for(int j = 0;j<lb;j++)
{
if(a[i+j]!=b[j])
{
f = false;
break;
}
}
if(f==true)
{
p = i;
break;
}
}
for(int i = p;i<la-p;i++)
{
a[i] = a[i+lb];
}
a[la-lb] = '\0';
la = strlen(a);
for(int i = la+lc;i>=p+lc;i--)
{
a[i] = a[i-lc];
}
for(int i = 0;i<lc;i++)
{
a[i+p] = c[i];
}
cout<<a;
return 0;
}
子串回文数
题目描述
输入1个字符串A(不含空格),请你在A所有的子串中查找是否有回文数
输入
输入1行,字符串A
输出
yes或者no
样例
输入复制
aa123123like
输出复制
yes
(aa是回文数)
样例
输入复制
ab123123like
输出复制
no
子串没有回文数
样例
输入复制
ab12321like
输出复制
yes
(12321是回文数)
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[1000];
int la;
cin.getline(a,1000);
la = strlen(a);
for(int i = 0;i<la-1;i++)
{
for(int j = i+1;j<la;j++)
{
bool f = true;
int s = i;
int e = j;
while(s<=e)
{
if(a[s]!=a[e])
{
f = false;
break;
}
s++;
e--;
}
if(f==true)
{
cout<<"yes";
return 0;
}
}
}
cout<<"no";
return 0;
}
字符压缩问题
题目描述
输入字符串,输出压缩后的字符串。压缩的方法是把连续的相同字母压缩为"长度+字母"的形式,在本题中,
单个的字母不需要压缩。
输入
一行,一个字符串,只包含小写英文字母,长度不超过255。
输出
样例
输入复制
aaabbbbbx
输出复制
3a5bx
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[1000];
int la;
int cnt;
cin.getline(a,1000);
la = strlen(a);
cnt = 0;
for(int i = 0;i<la;i++)
{
if(a[i]!=a[i+1])
{
if(cnt==0)
{
cout<<a[i];
}
else
{
cout<<cnt+1<<a[i];
}
cnt = 0;
}
else
{
cnt++;
}
}
return 0;
}
简单的a+b
题目描述
张晓菲同学做了简单的ab求和的问题。但是,如果要求输入的情况不是a和b,而是整个加法表
达式呢? 请想办法,计算加法表达式的结果。
输入
输入一个加法表达式,如1+2=,或者23+58=。(注意:做加法的2个整数都在0~10
9
的范围内)
输出
计算出输入表达式的正确结果
样例
输入复制
1+2=
输出复制
3
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
char n[1000];
int l;
int a;
int b;
int p;
cin.getline(n,1000);
l = strlen(n);
a = 0;
b = 0;
p = -1;
for(int i=0;n[i]!='+';i++)
{
a = a*10+(n[i]-48);
if(n[i+1]=='+')
{
p=i+1;
}
}
for(int i = p+1;n[i]!='=';i++)
{
b = b*10+(n[i]-48);
}
cout<<a+b;
return 0;
}
字符串判等
题目描述
输入2个字符串,判断他俩是否相同
输入
一行,一个字符串,只包含小写英文字母,长度不超过255。
输出
yes 或no
样例
输入复制
aaabb
aaabb
输出复制
yes
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
char a[1000];
char b[1000];
int la;
int lb;
cin.getline(a,1000);
cin.getline(b,1000);
la = strlen(a);
lb = strlen(b);
bool f = true;
for(int i = 0;i<la;i++)
{
if(a[i]!=b[i])
{
f = false;
break;
}
}
if(f==true)
{
cout<<"yes";
}
else
{
cout<<"no";
}
return 0;
}
子串出现的次数
题目描述
输入2个字符串(不含空格),请你找到B在A中出现的次数
输入
输入两行,分别是字符串A和B(A中一定包含B)
输出
一个整数,代表出现的次数
样例
输入复制
comertohereilikerer
er
输出复制
4
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
char a[1000];
char b[1000];
int la;
int lb;
int cnt;
cin.getline(a,1000);
cin.getline(b,1000);
la = strlen(a);
lb = strlen(b);
cnt = 0;
for(int i = 0;i<la-lb;i++)
{
bool f = true;
for(int j = 0;j<lb;j++)
{
if(a[i+j]!=b[j])
{
f = false;
break;
}
}
if(f==true)
{
cnt++;
}
}
cout<<cnt;
return 0;
}
简单a*b
题目描述
按照a*b = 的格式输入算式,通过计算输出a*b的结果。
输入
输入中包括一个表达式,如:a*b=,a和b都是int类型的正整数。
输出
结果只有一个正整数,整数在long long范围内。
样例
输入复制
100*200=
输出复制
20000
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
char n[1000];
int l;
int a;
int b;
int p;
cin.getline(n,1000);
l = strlen(n);
a = 0;
b = 0;
p = -1;
for(int i = 0;n[i]!='*';i++)
{
a = a*10+(n[i]-48);
if(n[i+1]=='*')
{
p=i+1;
}
}
for(int i = p+1;n[i]!='=';i++)
{
b = b*10+(n[i]-48);
}
cout<<a*b;
return 0;
}
是否是回文串
描述
输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
输入
输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。
输出
如果字符串是回文,输出yes;否则,输出no
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
char a[1000];
int la;
cin.getline(a,1000);
la = strlen(a);
bool f = true;
for(int i = 0;i<la/2;i++)
{
int j = la-1-i;
if(a[i]!=a[j])
{
f = false;
break;
}
}
if(f==true)
{
cout<<"yes";
}
else
{
cout<<"no";
}
return 0;
}
重新排列
题目描述
现在有一个18位以内的自然数,你可以将组成这个数的各位数字重新排列,得到一个数值为最小的新数,
但新数的位数保持不变。请编程打印出重新排列后的新数。(如:231重新排序后位数不变的最小数是
123,而23105重新排序后位数不变的最小数是10235。)
输入
一个整数(位数 <= 18)
输出
重新排列后最小的新数
样例
输入复制
382
输出复制
238
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
char a[1000];
int la;
cin.getline(a,1000);
la = strlen(a);
for(int i = 0;i<la-1;i++)
{
for(int j = 0;j<la-i-1;j++)
{
if(a[j+1]<a[j])
{
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
if(a[0]=='0')
{
int t = a[0];
a[0] = a[1];
a[1] = t;
}
cout<<a;
return 0;
}