一个字符串 S S S 是将 n n n 个字符顺次排列形成的序列, n n n 称为 S S S 的长度,表示为 ∣ S ∣ |S| ∣S∣。
如果字符串下标从 1 1 1 开始计算, S S S 的第 i i i 个字符表示为 S [ i ] S[i] S[i]
如果字符串下标从 0 0 0 开始计算, S S S 的第 i i i 个字符表示为 S [ i − 1 ] S[i-1] S[i−1]
声明、赋值和输出的方式与基础数据类型相同
string str;
str = "China";
cout << str << endl;
string s1 = "Chi", s2 = "na";
string str = s1 + s2;
cout << str << endl;
字符串加法表示字符串的连接
设存在两个字符串 s 1 , s 2 s1,s2 s1,s2,长度分别为 n , m ( n ≤ m ) n,m(n\leq m) n,m(n≤m)。字符串比较时以 A S C I I ASCII ASCII码值大小为依据,逐位进行比较排序。若前 n n n位相同,则长度更长的字符串更大。
字符串比较时可以直接使用比较运算符来进行操作。
string s1 = "the", s2 = "these";
cout << (s1 < s2) << endl;//true
后缀 是指从某个位置 开始到整个串末尾结束的一个特殊子串。字符串
S
S
S 的从
i
i
i 开头的后缀表示为
Suffix(S,i)
\textit{Suffix(S,i)}
Suffix(S,i),也就是
Suffix(S,i)
=
S
[
i
.
.
∣
S
∣
−
1
]
\textit{Suffix(S,i)}=S[i..|S|-1]
Suffix(S,i)=S[i..∣S∣−1]。举例来说,字符串 abcabcd
的所有后缀为 {d, cd, bcd, abcd, cabcd, bcabcd, abcabcd}
前缀 是指从串首开始到某个位置
i
i
i 结束的一个特殊子串。字符串
S
S
S 的以
i
i
i 结尾的前缀表示为
Prefix(S,i)
\textit{Prefix(S,i)}
Prefix(S,i),也就是
Prefix(S,i)
=
S
[
0..
i
]
\textit{Prefix(S,i)}=S[0..i]
Prefix(S,i)=S[0..i]。举例来说,字符串 abcabcd
的所有前缀为 {a, ab, abc, abca, abcab, abcabc, abcabcd}
。
string str;
cin >> str;
因为cin
会自动以空格为字符串的分隔,所以获取包含空格的字符串,我们需要使用getline
来获取一整行的所有字符作为一个新的字符串,然后根据题目的情况去做拆分。
string str;
getline(cin,str);
string str = "China";
cout << str.size() << endl;//5
cout << str.length() << endl;//5
传递一个参数,表示需要查找的字符串,返回一个整数,表示所查找的字符串所在的下标。
string str = "China";
cout << str.find("in") << endl;//2
第一个参数表示起始位置,第二个参数表示需要插入的字符串
string str = "China";
str.insert(2,"someone");
cout << str << endl;//Chisomeonena
第一个参数表示起始位置,第二个参数表示截取长度
string str = "Chinese people";
cout << str.substr(2) << endl;//inese people
cout << str.substr(2,4) << endl;//ines
第一个参数表示起始位置,第二个参数表示替换长度(原字符串),第三个参数表示新的字符串
string str = "Chinese people";
cout << str.replace(0,7,"American") << endl;//American people
reverse(arr+i,arr+j)
反转数组
i
∼
j
−
1
i\sim j-1
i∼j−1上的所有元素(不只是字符串)
reverse(a.begin()+i,a.begin()+j)
反转string
类型的字符串上
i
∼
j
−
1
i\sim j-1
i∼j−1上的所有元素
使用reverse
函数需要添加头文件#include
#include
#include
using namespace std;
int main()
{
string str = "China";
reverse(str.begin(), str.end());
cout << str << endl;//anihC
return 0;
}
在 C 语言中我们使用字符数组来表示字符串,即类型为 char
的数组。定义方式与普通的数组完全一致,并会使用空字符 \0
表示字符串的结尾。
因为数组的名字本身就代表地址,所以在读入字符串时不需要加上 &
。注意 scanf
会在遇到空格和回车时终止读入。
char str[110];
scanf("%s",str);
printf("%s",str);
strlen(const char *str)
:返回从 str[0]
开始直到 '\0'
的字符数。注意,未开启 O2 优化时,该操作写在循环条件中复杂度是
O
(
N
)
O(N)
O(N) 的。
strcmp(const char *str1, const char *str2)
:按照字典序比较 str1 str2
若 str1
字典序小返回负值,两者一样返回 0
,str1
字典序更大则返回正值。请注意,不要简单的认为返回值只有 0
、1
、-1
三种,在不同平台下的返回值都遵循正负,但并非都是 0
、1
、-1
。
strcpy(char *str, const char *src)
:把 src
中的字符复制到 str
中,str
src
均为字符数组头指针,返回值为 str
包含空终止符号 '\0'
。