c++中string (MFC)
题目:UVALive - 6439 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4450

题意: 输入一个整数 t , 代表程序测试的次数 , 然后要将一些非回文串进行替换形成回文串, 求形成的回文串的最大长度。
例如 abdab -> 非回文串 但是将ab替换成另一个字符* 那么形成 *d* 最长是3,所以最终结果输出3。
做这题之前,先来了解C++中的 string 的用法 。
1.
string 是包含在 头文件<string> 中 记住并非是 cstring 或者是 string.h ,而是另起一个头文件 string
并且需要加上 using namespace std; 的命名空间
2.
string 是c++语言中已经定义的类 ,属于一种类,
所以存在着构造函数和析构函数,
假设
string str; //先声明
string(int n,int c) ; ------>>>> 作用是 对str进行构造函数赋值 复制是n个c是字符串
例如 str.string (3 ,'#'); 那么输出 str 是 ### //三个
还存在 string (const char *p) -----> 拷贝构造赋值
例如: str.string("*****"); 那么输出 str s *****
3.
此处是解题关键,
string l="",r=""; //空内容
l=l+'a'; // l的内容是a
l=l+'b' // l的内容是ab
l=l+'d' // l的内容是abd
以此类推
string s="abc";
s='g'+s; // s的内容是gabc
s='y'+s; // s的内容是ygabc
以此类推 (主要说明 这里加法是 字符串的连接,接前接后看加法的前后)
ac代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Swap(a,b,t) t=a,a=b,b=t
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f;
const double eps=1e-;
char str[];
int main()
{
int t,cnt=;
cin>>t;
while (t--){
cin>>str;
int ans=;
string l="",r="";
int len=strlen(str);
int mid=len/;
for (int i=len-;i>=mid;i--){
l=l+str[len--i];
r=str[i]+r;
if (l==r&&len--i!=i){
ans+=;
l.clear();
r.clear();
}
if (i==len/&&!l.empty())
ans++;
}
printf("Case #%d: %d\n",++cnt,ans);
}
return ;
}
*******************************************我是分割线***********************************************
链接:https://ac.nowcoder.com/acm/contest/392/J
来源:牛客网
题目描述
月月熟知华华搭讪的规则。华华想与某个小姐姐搭讪,当且仅当小姐姐的昵称是他的昵称的子序列。为了方便,华华和小姐姐的昵称只由小写字母构成。为了更加方便,保证小姐姐的昵称长度不会比华华的长。
现在月月要快速的判断出哪些推荐好友要删掉,因为华华快回来了,时间紧迫,月月有点手忙脚乱,所以你赶紧写个程序帮帮她吧!
输入描述:
第一行输入一个字符串A表示华华的昵称。
第二行输入一个正整数N表示华华的推荐好友的个数。
接下来N行,每行输入一个字符串BiBi表示某个推荐好友的昵称。
输出描述:
输出N行,对于第i个推荐好友,如果华华可能向她搭讪,输出Yes,否则输出No。
注意大写,同时也要注意输出效率对算法效率的影响。
备注:
1≤|A|≤1061≤|A|≤106,1≤N≤1061≤N≤106,1≤∑Ni=1Bi≤106
解法1(百度子序列自动机)
解法2(利用string里的find的函数)
string a;
a.find('a'); //在string类的a中查找第一个 字符a,返回值为该a的地址
a.find('b',pos); // 在string类的a中从位置pos开始查找第一个字符b,同样返回值为该b地址 假若b位置之后不存在元素b,那么返回的是npso值,实际值为-1
解法一(STL中string的直接使用):
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Swap(a,b,t) t=a,a=b,b=t
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f;
const double eps=1e-;
string str1,str2;
int main()
{
int t;
cin>>str1>>t;
int len1=str1.length();
while (t--){
cin>>str2;
int len2=str2.length();
bool flag=true;
int pos=-,i=;
while (flag&&pos<len1&&i<len2){
pos=str1.find(str2[i],pos+);
if (pos==str1.npos) //若不存在则返回npso值,实为-1
flag=false;
i++;
}
if (flag)
printf("Yes\n");
else
printf("No\n");
}
return ;
}
解法二(子序列自动机):
子序列自动机详解:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f; const int MAX=1e6+;
char str1[MAX],str2[MAX];
int dfs[MAX][],res[];
int main()
{
int n;
cin>>str1+>>n;
int len=strlen(str1+);
for (int i=;i<;i++)
res[i]=-;
for (int i=len;i>=;i--){
for (int j=;j<;j++){
dfs[i][j]=res[j];
}
res[str1[i]-'a']=i;
}
while (n--){
cin>>str2+;
int len1=strlen(str2+);
bool flag=true;
int tmp=;
for (int i=;i<=len1;i++){
if (dfs[tmp][str2[i]-'a']==-){
flag=false;
break;
}
tmp=dfs[tmp][str2[i]-'a'];
}
if (flag)
printf("Yes\n");
else
printf("No\n");
}
return ;
}
对于string类的输入问题 1.假若输入的字符串中不存在空格, 那么可以直接 用cin,
string a;
cin>>a;
int len=a.length();
cout<<"len="<<len<<endl;

不难发现这里和char型的输入是相同的。
2.那假若你输入的字符串中存在空格呢? 哪要怎么输入才能对?
我们都知道gets函数,但是在语法上string不能用gets,否则会报错。
解决法案: (使用getline函数)
string a;
getline(cin,a);
int len=a.length();
cout<<"len="<<len<<endl;

其实getline是存在三个参数的函数。 getline(参数1,参数2,参数3)
参数1 ----> 输入 std::cin
参数2 ----> string变量名
参数3 ----> 结束字符 例子如下:(参数3可缺省)
string a;
getline(cin,a,'a');
int len=a.length();
cout<<"len="<<len<<endl;

截取字符串操作
假设你现在要执行的操作是截取string部分字符串,通过暴力截取的方法不如使用下列库函数。 1.str1.substr(a,b); 其中a,b都为整数, 这里的意思是截取地址a后的b个元素。(实例如下:)
int main()
{
string str,str1;
cin>>str1;
cout<<str1<<endl;
str=str1.substr(,);
cout<<str<<endl;
return ;
}
2.str1.replace(); 替代函数 https://blog.csdn.net/jiary5201314/article/details/52502516/
c++中string (MFC)的更多相关文章
- 标准C++中string类的用法
转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...
- C++中string跨DLL失败解决途径
1.问题描述: 在一个MFC应用程序exe中,调用另一个DLL中的函数,函数中的一个形参是string类型的,每次调用都会出现乱码的情况. 调用前: 调用后: 2.原因分析: 不同的模块各自有一份C运 ...
- 标准C++中string类的用法总结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- C++中string类的操作函数。
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- BCL中String.Join的实现
在开发中,有时候会遇到需要把一个List对象中的某个字段用一个分隔符拼成一个字符串的情况.比如在SQL语句的in条件中,我们通常需要把List<int>这样的对象转换为“1,2,3”这样的 ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- java中string内存的相关知识点
(一):区别java内存中堆和栈: 1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该 ...
- java中String的相等比较
首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
随机推荐
- 网站渗透常用到的Python小脚本
0×00渗透的很多时候,找到的工具并不适用,自己码代码才是王道,下面三个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小使用,求欣赏,求好评. 0×01记录root密码小工具 root.py ...
- awk的简单使用
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- 「C语言」常量和变量的表示、应用和变量命名规则
在程序运行中,其值不能改变的量成为常量. 在基本数据类型中,常量可分为整型常量.实型常量.符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下: 目录: 一.常量 二.C语言标识符 三.变 ...
- INFORMATICA 操作流程
- Spring Framework5.0 学习(2)-- Quick Start
官网:https://projects.spring.io/spring-framework/ Spring Framework 5.x 要求 JDK 1.8以上 1.0 在(1)的基础上,给bu ...
- window.jQuery || document.write("<script src='__PUBLIC__/assets/js/jquery.js'>"+"<"+"/script>")
今天无意中看到这样一段代码 <script type="text/javascript"> window.jQuery || document.write(" ...
- [19/04/06-星期六] 多线程_静态代理(StaticProxy)和 lamda (简化代码,jdk8新增)
一.静态代理 [代码示例] /*** * 静态代理:记录日志等,类是写好的,直接拿来用. 动态代理:随用随构建,临时抱佛脚 * 婚庆公司:代理角色,帮你搞婚庆的一切,布置房间等等 * 自己:真实角色, ...
- 相机姿态估计(Pose Estimation)
(未完待续.....) 根据针孔相机模型,相机成像平面一点的像素坐标p和该点在世界坐标系下的3D坐标P有$p=KP$的关系,如果用齐次坐标表示则有: $$dp=KP$$ 其中d是空间点深度(为了将p的 ...
- POJ 1753 Flip Game (状态压缩 bfs+位运算)
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...
- Parallel.ForEach使用示例
新建一个.NET Core控制台程序,代码如下: using System; using System.Collections.Generic; using System.Threading; usi ...
2.str1.replace(); 替代函数