什么是字符串?
C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。
字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。
因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
所以我们新建字符串变量时,要比实际多一个字符,确保结尾字符'\0'能被存储。
字符串变量的表示
在C语言中,使用char类型的数组,来存储字符串变量
注:C语言中,没有专用的字符串类型。
在C++中,使用std::string类型来表示字符串变量
如何创建?
#include<bits/stdc++.h>
using namespace std;
void lesson1()
{
//C语言风格的字符串
char c[6] = "hello";
//char c1[7] = {'1','2','3','4','5','6'}
cout<<c<<endl;
}
int main()
{
lesson1();
return 0;
}
void lesson2()
{
string s = "abcde";
cout<<s[2]<<endl;//输出结果为:c
}
int main()
{
lesson1();
return 0;
}
多个字符串如何存储?
char c1[4][4];//这里是因为输入的是abc def 所以是c1[4][4]
cin>>c1[0]>>c1[1];
cout<<c1[0]<<endl<<c1[1]<<endl;
输入:abc def
输出:abc
def
或:
getline(cin,s);//输入:abc def输出:abc def (空格会原封不动的输出)
cout<<s<<endl;
例题1:翻转单词
题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以一个空格隔开。为简单起见,输入的句子中都不包含标点符。
输入描述:一个包含空格的字符串,表示一个英文句子(字符串的长度不超过 200200 ,且每个单词的长度不超过 5050 )。
输出描述:翻转后的句子,单词与单词间使用一个空格隔开。
输入样例 1:I am student 输出样例1:student am I
#include<bits/stdc++.h>
using namespace std;
void lesson1()
{
string s, a[101];
int i, n;
while(cin >> s)
{
a[n] = s;
n++;
}
for (i = n - 1; i >= 0; i--)
{
cout << a[i] << " ";
}
}
int main()
{
lesson1();
return 0;
}
例题2:替换字符
题目描述:给定一个由大小写字母构成的字符串。把该字符串中特定的字符全部用字符 “#” 替换。请你输出替换后的字符串。
输入描述:输入共两行。第一行包含一个长度不超过 3030 的字符串。第二行包含一个字符,表示要替换掉的特定字符。
输出描述:输出共一行,为替换后的字符串。
输入样例 1:hello l 输出样例1:he##o
#include<bits/stdc++.h>
using namespace std;
void les2()
{
string s;
int i;
char c;
cin>>s;
cin>>c;
for(i=0;i<s.size();i++)
{
if(s[i]==c)
s[i]='#';
}
cout<<s;
}
int main()
{
les2();
return 0;
}
例题3:将字符串反序
题目描述:请将一个给定的字符串反序(字符长度为 11 到 1000010000,且有可能包含空格)。
输入描述:反序前的字符串。
输出描述:反序后的字符串。
输入样例 1:abcd 输出样例1:dcba
#include<bits/stdc++.h>
using namespace std;
void les3()
{
string s;
getline(cin, s);
int n=s.size();
for(int i=n-1;i>=0;i--)
{
cout<<s[i];
}
}
int main()
{
les3();
return 0;
}
例题4:字符串加密
题目描述:输入一个字符串,将所有字母变成它的下一字母。变换规则如下:
(1). ‘aa’ 变成 ‘bb’、’bb’ 变成 ‘cc’ \cdots⋯、’yy’ 变成 ‘zz’、’zz’ 变成 ’aa’、’AA’ 变成 ‘BB’、’BB’ 变成 ‘CC’…
(2). 其它非字母字符保持不变
输入描述:待加密的字符串(字符串中没有空格)
输出描述:加密后的密串
输入样例 1:abcdz 输出样例1:bcdea
#include<bits/stdc++.h>
using namespace std;
void les4()
{
string a;
int n,i,j,x;
//获取字符串,存入a中
getline(cin,a);
//将a的尺寸大小给 x
x=a.size();
//从0遍历到x-1
for(i=0;i<x;i++){
//若第i个元素在是大写字母
if(a[i]>='A'&&a[i]<='Z'){
//且如果a[i] == 'Z',输出时就A[I]=='A'
if(a[i]=='Z') a[i]='A';
//a[i]是其他值时,就+1输出
else a[i]+=1;
}
else if(a[i]>='a'&&a[i]<='z'){
if(a[i]=='z') a[i]='a';
else a[i]+=1;
}
}
cout<<a;
}
int main()
{
les4;
return 0;
}
例题5:删除字符串中指定字符
题目描述:请编写程序删除字符串 ss 中指定的字符 chch。(字符串 ss 的最大长度不超过 100100)
输入描述:两行
第 11 行,字符 chch
第 22 行,字符串 ss(包含空格)
输出描述:删除 chch 后的字符串
输入样例 1:a abcdabc 输出样例1:bcdbc
#include<bits/stdc++.h>
using namespace std;
void les5()
{
int i;
char x;
string a;
//获取要删除的字符x
cin>>x;
getline(cin,a);
getline(cin,a);
for(i=0;i<a.length();i++) {
//遍历时若第i个字符等于x内的字符,跳过
if (a[i]==x) continue;
else cout<<a[i];
}
}
int main()
{
les5();
return 0;
}