知识点
//字符串就是字符数组加上结束符\0;
//字符数组的长度至少比字符串的长度多1;
/*
#include<iostream>
using namespace std;
int main()
{
char s1[]={"c","+","+"};//列表初始化 没有空字符
char s2[]={"c","+","+","\0"};//列表初始化,含有显示的空字符
char s3[]="c++";//自动添加表示字符串结尾的空字符
char s4[6]="daniel" //错误的 因为没有空间可以放空字符
return 0;
}
*/
/*
//输入输出
#include<iostream>
using namespace std;
int main()
{
char str[100];
//cin >> str;// 以空格为止
//scanf("%s",str);//只用数组名 不用& 以空格为止
//cin >> str + 2; //从下标2开始
//fgets(str,100000000,stdin); //可以读入空格 可以读入回车
// getline(cin ,str);// 如果是string 类型 用getline可以读入空格
cin.getline(str,1000); //char 型可以读入空格
//cout << str<<endl;
//cout << str+2; //从下标2开始输出
puts(str);
//printf("%s\n",str);
return 0;
}
*/
//strcpy函数
/*
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s2[100];
char s1[10]="scdf";
strcpy(s2,s1);
cout << s1<<endl<<s2<<endl;//都是scdf;
return 0;
}
*/
/*
//遍历字符数组中的字符
#include<iostream>
using namespace std;
int main()
{
char s[100]="abcd";
for(int i=0;s[i];i++)
{
cout << s[i] <<endl;
}
return 0;
}
*/
//标准库类型string 可变长的字符序列
//定义和初始化
/*
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1; //默认初始化 s1是一个空字符
string s2=s1;
string s3="hello";
//string s4=(10,'c')//10个c
cin >> s1;
//cout <<s1;
printf(s1.c_str()); //不能用printf直接输出
return 0;
}
*/
/*
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1="abc";
string s2;
cout << s1.empty()<<endl; //0
cout <<s2.empty()<<endl; //1
cout <<s1.size()<<endl; //3
cout <<s2.size()<<endl; //0
return 0;
}
*/
//string的比较 直接用> < >= <= !=
//当把string 对象和字符字面值及字符串字面值混在一条语句中使用时 必须确保每个加法运算符的两侧的运算对象至少有一个是 string
/*
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1="abc";
string s2="acd";
//cout << s1+s2 <<endl; //string 对象相加
//for(char c:s1) cout <<c <<endl; //遍历
for(char &c:s1) c='z'; //改变s1中的值 全是z了
cout <<s1 <<endl;
return 0;
}
*/
题目描述
代码如下
#include<iostream>
using namespace std;
char s[100010];
int cnt[26];//计算每个字符出现的次数
int main()
{
cin.getline(s,100010); //可以读入空格
for(int i=0;s[i];i++)
{
cnt[s[i]-'a']++;
}
for(int i=0;s[i];i++)
{
if(cnt[s[i]-'a']==1)
{
cout << s[i]<<endl;
return 0; //结束
}
}
cout << " no ";
return 0;
}
题目描述
代码如下
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);
for(int i=0;i<s.size();i++)
{
if(s[i]>='a'&&s[i]<='z') //s[i]-'a':排多少位 s[i]-'a'+1:题目要求下一位 %26:会转回去
{
s[i]=(s[i]-'a'+1)%26+'a';
}
else if(s[i]>='A'&&s[i]<='Z')
{
s[i]=(s[i]-'A'+1)%26+'A';
}
}
cout << s;
return 0;
}
题目描述
代码如下
//转换成数字之后找规律
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
string s1,s2;
while(n--)
{
cin >> s1>> s2;
int x,y;
if(s1=="Hunter") x=0;
else if(s1=="Bear") x=1;
else x=2;
if(s2=="Hunter") y=0;
else if(s2=="Bear") y=1;
else y=2;
if(x==y) cout << "Tie" ;
else if(x==(y+1)%3) cout << "Player1"; //规律
else cout << "Player2";
}
return 0;
}
题目描述
代码如下
#include<iostream>
using namespace std;
int main()
{
string a,b;
getline(cin,a);
getline(cin,b);
for(int i=0;i<a.size();i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
a[i]=a[i]+32;
}
}
for(int i=0;i<b.size();i++)
{
if(b[i]>='A'&&b[i]<='Z')
{
b[i]=b[i]+32;
}
}
if(a<b) cout << " < ";
else if(a>b) cout << " > ";
else cout << " = ";
return 0;
}
*/
题目描述
代码如下
//substr函数:(左闭右开)求个字符串中某一段 substr(角标,长度) substr(角标):直接到结尾
#include<iostream>
using namespace std;
int main()
{
string a,b;
while(cin>>a>>b)
{
int p=0;//记录角标
for(int i=0;i<a.size();i++)
{
if(a[i]>a[p])
p=i;
}
cout <<a.substr(0,p+1)+b+a.substr(p+1);
}
return 0;
}
题目描述
代码如下
#include<iostream>
using namespace std;
int main()
{
double k;
cin >> k;
string a,b;
cin >> a;
cin >> b;
int n=0;
int len=a.size();
for(int i=0;i<len;i++)
{
if(a[i]==b[i])
{
n++;
}
}
if((double)n/len>=k) cout << "yes";
else cout << "no";
return 0;
}
题目描述
代码如下
#include<iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
string z;
for(auto c:s)
{
z=z+c+" ";// 注意string加法规则,不能写z+=c+" "
}
z.pop_back();//删去最后一个空格
cout << z;
return 0;
}
代码如下
//cin 不会读入空格 所以用cin每读入一个字符串都在后面加一个空格
/*
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin >> s)
{
cout << s <<" ";
}
return 0;
}
*/
//第二种做法 手动去掉多余的空格 双指针算法
/*
#include<iostream>
using namespace std;
int main()
{
string s; //原字符串
getline(cin,s);
string r; //答案字符串
for(int i=0;i<s.size();i++)
{
if(s[i]!=' ') r+=s[i];
else
{
r+=' ';
int j=i;//j用来遍历当前连续空格
while(j<s.size()&&s[j]==' ') j++;//去掉连续的空格
i=j-1; //i++之后等于j
}
}
cout << r;
return 0;
}
*/
//第三种做法 局部性判断
/*
#include<iostream>
using namespace std;
int main()
{
string s; //原字符串
getline(cin,s);
string r; //答案字符串
for(int i=0;i<s.size();i++)
{
if(s[i]!=' ') r+=s[i];
else
{
if(!i||s[i-1]!=' ') r+=' '; //第一个元素或者前一个元素不是空格的时候加空格
}
}
cout << r;
return 0;
}
*/
代码如下
#include<iostream>
using namespace std;
int main()
{
string a,b;
getline(cin,a);
for(int i=0;i<a.size();i++)
{
b+=(char)(a[i]+a[(i+1)%a.size()]);
//(char)强制类型转换 a[i]如果是最后一个的话 a[i+1]应该是第一个
}
cout << b;
return 0;
}
代码如下
#include<iostream>
#include<sstream>//可以把一个字符串初始化一个类似cin的东西,从字符串中读出任意需要的格式的信息
using namespace std;
int main()
{
string s;
getline(cin,s);
string a,b;
cin >> a>>b;
stringstream ssin(s); //初始化 ssin只是一个名字
string str;
while(ssin>> str) //把ssin当作cin
{
if(str==a) cout << b<< ' ';
else cout <<str<< ' ';
}
return 0;
}
代码如下
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while(n--)
{
string s;
cin>>s;
int cnt =0; //计数
char c;
for(int i=0;i<s.size();i++)
{
int j=i; //双指针
while(j<s.size()&&s[j]==s[i]) j++;
if(j-i>cnt) cnt=j-i,c=s[i];
i=j-1;//上边儿有i++
}
cout << c << ' ' << cnt << endl;
}
return 0;
}
代码如下
#include<iostream>
using namespace std;
int main()
{
string r;//存答案
string s;
while(cin>>s)
{
if(s.back()=='.') s.pop_back();
//s.back():最后一个字符 s.pop_back():去掉最后一个字符
if(s.size() > r.size()) r=s;
}
cout << r << endl;
return 0;
}
代码如下
#include<iostream>
using namespace std;
int main()
{
string s[100];
int n=0;
while(cin>>s[n]) n++;
for(int i=n-1;i>=0;i--)
{
cout << s[i] <<' ';
}
cout << endl;
return 0;
}
代码如下
#include<iostream>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
if(a.size()<b.size()) swap(a,b);//保证a是较长的字符串
for(int i=0;i<a.size();i++)
{
a=a.substr(1)+a[0];
//把第一个位置移到最后 a.substr(1):从1开始表明把0去掉 ,再在最后加上0
for(int j=0;j+b.size()<=a.size();j++)
{
int k;
for(k=0;k<b.size();k++)
if(a[j+k]!=b[k]) break; //对应位置不相等
if(k==b.size())
{
cout << "ture" ;
return 0;
}
}
}
cout << "false";
return 0;
}
代码如下
#include<iostream>
using namespace std;
int main()
{
string str;
while(cin>>str,str!=".")
{
int len=str.size();
for(int n=len;n>=0;n--)
{
if(len%n==0)
{
int m=len/n; //求一个的长度
string s=str.substr(0,m);
string r;
for(int i=0;i<n;i++) r+=s;
if(r==str)
{
cout << n << endl;
break;
}
}
}
}
return 0;
}