c++机试字符串处理

在这里插入图片描述

最长回文子串/ag

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。

示例 2:
输入: “cbbd”
输出: “bb”

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string a, string b){
   
	return a.size() > b.size();
}
int main(){
   
	string s;
	string a[200];
	int k = 0;
	cin >> s;
	for (int i = 0; i < s.size(); i++){
   
		string s1;
		s1 = s[i];
		for (int j = i + 1; j < s.size(); j++){
   
			s1.push_back(s[j]);
			string s2(s1.rbegin(), s1.rend());//别忘了括号啊!!!
			if (s1 == s2){
   
				a[k++] = s1;
			}
		}
	}
	sort(a,a+k,cmp);//排序
	/*int max = a[0].size(), j = 0;//或者这样选出最长的
	for (int i = 0; i < k; i++){
		if (a[i].size() > max){
			max = a[i].size();
			j = i;
		}
	}*/
	cout << a[0];
	cin >> s;
}

无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
   
	string s, s1;//s1存储子串
	cin >> s;
	int max = 1;//最大不重复子串长度
	for (int i = 0; i < s.size(); i++){
   //如s=abcabd,i=2时
		s1.push_back(s[i]);//s1=c
		int n = 1;//当前不重复子串长度
		for (int j = i + 1; j < s.size(); j++){
   
			if (s1.find(s[j]) == string::npos){
   //在s1=c中找a,如果没有找到
				n++;//个数加一
				s1.push_back(s[j]);//s1=ca,再循环,在ca中找b
			}
			else break;//如果找到了,跳出循环
		}
		if (n > max) max = n;
		s1.clear();
	}
	cout << max;
}

字符串操作,输入字符串,提取其中的数字并相加,在屏幕上显示结果,比如输入dfd56hj5hjkk9kk7,应该在屏幕上显示:56+5+9+7=77.

#include<iostream>
#include<string>
using namespace std;
int main(){
   
	string s;
	int n = 0, a, k = 0;
	int num[20] = {
    0 };
	getline(cin, s);//可接受空格
	//遍历找数
	for (int i = 0; i < s.size();){
   
		a = 0;
		while (s[i] >= '0'&&s[i] <= '9'){
   //把连续数字暂存在a里,ssda15kkk,把15存在a里
			a = a * 10 + s[i]-'0';
			i++;
		}
		if (a != 0){
   //如果a中有数,存到num[],k记录下标
			num[k] = a;
			k++;
		}
		if (a == 0) i++;//如果a[i]非数字,i++
		n = n + a;//n为总和
	}
	//输出
	for (int i = 0; i < k; i++){
   
		cout << num[i];
		if (i < k - 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值