string字符串详细用法:
1、初始化:
- string str ------ 生成一个空字符串str,之后用cin和cout进行输入和输出,默认以空格结束,若想读入一整行,
- 则用getline(cin, str)输入,在之前可以用cin.get()读入回车,相当于getchar()
常规赋值方法:
- string str = "aaaaa"
- char *cstr = "bbbbb";string str2(cstr);
- char ch = 'c'; string str(5, ch) ------ 用n个字符ch初始化str
- str.resize(len, ch) ------ 把字符串当前大小置为len,并用字符ch填充不足的部分
- char *p = str.c_str() ------ 将string类转化为char型(其中str被转化)
2、描述:
对于上面的字符串,可以用str[x]表示字符串中的第x+1个字符
- str.length() ------ 返回当前字符串的长度
3、赋值:
- str = str2 ------ 字符串复制
- str.assign(cstr) ------ 将C类字符串赋值给str
- str.assign(cstr, 2) ------ 将C类字符串的前n个字符赋值给str
- str.assign(8, 'c') ------ 用8个字符c赋值给当前字符串
- str.assign(str2, 0, 3) ------ 把字符串str2中从0开始的3个字符赋给当前字符串
4、链接:
- str += str2 ------ 把str2连接到str的后面
- str.append(cstr) ------ 将C类字符串str2连接到str的后面
- str.append(cstr, 2) ------ 将C类字符串str2的前n个字符连接到str的后面
- str.push_back('k') ------ 把一个字符连接到str的结尾
5、插入与替换:
- str.replace(0, 3, "abcd"); ------ 删除从0开始的3个字符,然后在0处插入字符串"abcd"
- str.replace(0, 3, str2, 2); ------ 删除从0开始的3个字符,然后在0处插入字符串str2的前2个字符
- str.replace(0, 3, "opqrstuvw", 2, 4); ------ 删除从0开始的3个字符,然后在0处插入字符串“opqrstuvw”从位置2开
- 始的4个字符
- str.replace(0, 3, 8, 'c'); ------ 删除从0开始的3个字符,然后在0处插入8个字符c
对于插入,将replace改为insert,并将前两个参数改为1个,即插入的位置即可
6、比较:
字符串可以直接用<=、==等进行比较,并返回0或1
而对于C类字符串,用str.compare(cstr)比较,小于0表示前者大
- str1.swap(str2) ------ 交换两个字符串
7、查找:
- str.find('i', 0) ------ 从第0个字符开始查找字符'i'并返回其下标,找不到返回-1
- str.find("name", k); ------ 从第k个字符开始查找字符串"name"并返回其下标,找不到返回-1
- str.rfind("name", string::npos) ------ 反向查找字符串"name"并返回其下标,找不到返回-1
8、翻转:
- reverse(str.begin(), str.end()) ------ 翻转字符串
9、取子串:
- str.substr(k, len) ------ 从位置k开始取长度为len的子串,如果len<=0返回空串,如果不传入len则默认到字符串末尾
- str.substring(a, b) ------ 取位置a到位置b-1的子串,如果a>b,则交换a,b,如果出现负数则默认修改为0
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
int len, loc;
string str, temp = "fffffffff";
getline(cin, str);
cout<<str<<endl;
printf("%c\n", str[3]);
len = str.length();
printf("%d\n", len);
str.resize(20, 'k');
cout<<str<<endl;
loc = str.find('k', 0);
printf("%d\n", loc);
loc = str.rfind("kk", string::npos);
printf("%d\n", loc);
str.replace(0, 3, temp, 2, 3);
cout<<str<<endl;
reverse(str.begin(), str.end());
cout<<str<<endl;
}