字符串——综合问题(c++)(求关注666)

子串查找
题目描述
输入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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值