文章目录
引用头文件
#include <iostream>
#include <string>
初始化赋值
1. 空串
string s; //s是一个空串
2. 拷贝复制
string s2=s1; //拷贝初始化,s1是string类对象
string s2(s1); //直接初始化,s1是string类对象
3. 直接初始化赋值
string s1=“hello world”; //拷贝初始化
string s2(“hello world”); //直接初始化
4. 单个字符初始化
string s(10, 'a'); //直接初始化,s的内容是aaaaaaaaaa
遍历 string 类
1. 下标索引遍历
#include <iostream>
#include <string>
int main() {
std::string str = "Hello World";
for (int i = 0; i < str.length(); i++) {
std::cout << str[i] << std::endl;
}
return 0;
}
2. 迭代器遍历
#include <iostream>
#include <string>
int main() {
std::string str = "Hello World";
for (std::string::iterator it = str.begin(); it != str.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
3. 使用 range for 循环遍历字符串(需要 C++11 或更新的版本)
#include <iostream>
#include <string>
int main() {
std::string str = "Hello World";
for (char c : str) {
std::cout << c << std::endl;
}
return 0;
}
printf 打印 string
string str1 = "hello";
printf("%s \n", str1.c_str());
类型强转
int 和 string 类型强转
int -> string : to_string( )
int、long、loat、double
等类型 转换 成string
。
double num = 12.3456789;
string str1 = to_string(num);
string -> int : atoi( )
将string
类型强转为int
类型
string str1 = "123";
int num = stoi(str1); // stoi 参数只能是字符串类型,不能是字符类型
迭代器
string
容器支持 ++ -- +i -i
操作
string 常用方法
方法 | 说明 |
---|---|
begin() | 将开头元素迭代器返回 |
end() | 将迭代器返回到结束 |
cbegin() | 它将 const_iterator 返回到开头 |
cend() | 它返回一个指向字符串末尾字符的 const_iterator |
rbegin() | 它返回反向迭代器以反向开始 |
rend() | 它将反向迭代器返回到反向结束 |
size() | 返回字符串的长度 |
length() | 返回字符串的长度 |
clear() | 清除字符串 |
empty() | 测试字符串是否为空 |
at(n) | 获取字符串位置 n 的字符 |
back( ) | 用于访问最后一个字符 |
front( ) | 用于访问第一个字符 |
operator+= | 添加到字符串 |
append(str) | 添加到字符串 |
push_back(c) | 将一个字符附加到字符串 |
pop_back() | 用于删除最后一个字符 |
insert(n, str) | 在 n 处插入 str |
erase(n, len) | 在 n 处删除 len 个字符 |
replace(n, len, str2) | 从位置 n 开始,删除 len 个字符,并插入str2 |
c_str( ) | 用于获得等效的 C 字符串 |
str.find( string ) | 在 str 中查找 string,找到返回索引迭代器 |
str.substr(size_t pos, size_t len) | 截取字符串 : pos表示要截取的子字符串的起始位置,len表示要截取的子字符串的长度 |
判断字符串是否为空串
s.empty( )
判断字符串是否为空串
获取字符串中字符个数
两种方法并没有区别
s.size( )
获取字符串中字符个数s.length( )
获取字符串中字符个数
插入元素
s.insert(pos, args)
在 pos 之前插入 args 指定的字符
// 在 s 的位置 0 之前插入 s2 的拷贝
s.insert(0, s2)
删除元素
s.erase(pos, len)
删除从 pos 开始的 len 个字符。如果 len 省略,则删除 pos 开始的后面所有字符。返回一个指向 s 的引用
string str; //字符串
string target=",/"; //要删除的指定字符串
int n=target.size();//要删除的指定字符串的长度
cout<<"请输入字符串str:";
while(cin>>str){
if(cin.peek()=='\n') break;//遇到回车则停止输入字符串str
}
int p=str.find(target);//找到指定删除字符串target在str中的位置
str.erase(p,n);//删除字符串str中的指定字符串target
追加字符串
s.append(args)
将 args 追加到 s。返回一个指向 s 的引用。 args 必须是双引号字符串
std::string str;
std::string str2="Writing ";
std::string str3="print 10 and then 5 more";
str.append(str2); // Writing
str.append(str3,6,3); // Writing 10
str.append("dots are cool",5); // Writing 10 dots
str.append("here: "); // Writing 10 dots here:
str.append(10u,'.'); // Writing 10 dots here: ...........
替换字符串中指定字符
s.replace(n, len, str2)
从位置 n 开始,删除 len 个字符,并插入str2s.replace(n, len, str2)
从位置 n 开始,删除 len 个字符,并插入str2
string str1 = "123456789";
string str2 = "abc";
str1.replace(1, 2, str2); // 从位置 1 开始,删除 2 个字符,并插入 "abc" 删除插入的字符数量不必相等
// 1abc456789
str1.replace(5, 1, str2, 1,2); // 从位置 5 开始,删除 1 个字符,并插入str2 中从 1 开始的 2 的字符 "bc"
// 1abc4bc6789
字符串翻转
s.reverse()
翻转字符串
#include <iostream>
#include <algorithm>
string s2 = "12345"; // 初始化一个字符串
reverse(s2.begin(), s2.end()); // 反转 string 定义的字符串 s2
cout << s2 << endl; // 输出 54321
返回可以直接打印的字符串
s.c_str()
返回一个正规的C字符串指针也就是char* 类型的指针
#include <iostream>
#include <string>
int main()
{
char* c;
std::string a="1234";
c = (char*)a.c_str();
printf("c = %s \n", c);
return 0;
}
截取部分字符串
str1.substr(2,3)表示从2第二个开始,向后截取3个字符
处理string对象中的字符 ,针对某个字符的特性判断函数
C++标准库中 cctype
中的主要函数,该库主要是字符处理功能,这个头文件声明了一组函数来分类和变换单个字符。这个库中主要有两种函数:一类负责字符分类功能;一类负责字符转换功能。