找回密码
 中文实名注册
查看: 259|回复: 3

C++ 字符串

[复制链接]

694

主题

1080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22794
发表于 2022-6-30 08:48:50 | 显示全部楼层 |阅读模式
序号
函数 & 目的
1strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如:
string str1 = "runoob";
string str2 = "google";
string str = str1 + str2;
3strlen(s1);
返回字符串 s1 的长度。
4strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
5strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。




String类:按照类的方式进行动态管理字符串
底层:是一种顺序表的结构,元素是char类型的字符

string类的常用构造函数:
[C++] 纯文本查看 复制代码
string  str——构造空的string类对象,即空字符串
string str(str1)——str1 和 str 一样
string  str("ABC")——等价于 str="ABC"
string  str("ABC",strlen)——等价于 "ABC" 存入 str 中,最多存储 strlen 个字节
string  str("ABC",stridx,strlen)——等价于 "ABC" 的stridx 位置,作为字符串开头,存到str中,最多存储 strlen 个字节
string  str(srelen,'A')——存储 strlen 个 'A' 到 str 中


[C++] 纯文本查看 复制代码
//用法小实例
#include<iostream>
using namespace std;
 
int main() {
        string s1;   //空字符串
        string s2(10,'$');  //十个 $
        string s3("hello world");  //hello word
 
        cout << s3.size << endl;
        cout << s3.length << endl; //都是求字符串长度  11
        cout << s3.capacity << endl; //求s3的容量
 
        s3.clear();  //清空
        string s4(s3); //s4 和 s3一样
}

注:使用string类时,必须包含头文件以及using namespace std。

string常用成员函数:
assign函数:
[C++] 纯文本查看 复制代码
str.assign("ABC")——清空字符串,并设置为 "ABC"
str.assign("ABC",2)——清空字符串,并设置为"AB",保留两个字符
str.assign("ABC",1,1)——清空字符串,设置为 "ABC" 中的从 位置1 开始,保留 1个 字符
str.assign(5,'A')——清空字符串,然后字符串设置为 5个 'A'
str.length()——求字符串长度
str.size()——和 length() 一样
str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
str.resize(10)——设置当前 str 的大小为10,若大小大与当前串的长度,\0 来填充
str.resize(10,char c)——设置当前 str 的大小为10,若大小大与当前串的长度,字0符c 来填充
str.reserve(10)——设置str的容量 10,不会填充数据
str.swap(str1)——交换 str1 和 str 的字符串
str.push_back('A')——在str末尾添加一个字符  'A' ,参数必须是字符形式
str.append("ABC")——在str末尾添加一个字符串 "ABC",参数必须是字符串形式


insert函数方法:
[C++] 纯文本查看 复制代码
str.insert(2,3,'A')——在str下标为2的位置添加 3个 字符'A'
str.insert(2,"ABC")——在str下标为2的位置添加 字符串 "ABC"
str.insert(2,"ABC",1)——在str下标为2的位置添加 字符串 "ABC" 中 1个 字符
str.insert(2,"ABC",1,1)——在str下标为2的位置添加 字符串 "ABC" 中从位置 1 开始的 1 个字符


注:上个函数参数中加粗的 1 ,可以是 string::npos,这时候最大值,从 位置1 开始后面的全部字符

[C++] 纯文本查看 复制代码
str.insert( iterator pos, size_type count, CharT ch )——在 str 中,迭代器指向的 pos位置 插入 count个 字符 ch
s4.insert(++str1.begin(),2,'a');        结果:s4:ABCD    ->    AaaBCD

str.insert( iterator pos, InputIt first, InputIt last )——在 str 中,pos位置 插入 str1 的 开始位置 到 结束为止
s4.insert(s4.begin(),str1.begin(),str1.end());        结果:s4:ABCD  str1:abc   ->    abcABCD

str.erase(2)——删除 下标2 的位置开始,之后的全删除
str.erase(2,1)——删除 下标2 的位置开始,之后的 1个 删除
str.clear()——删除 str 所有
str.replace(2,4,"abcd")——从 下标2 的位置,替换 4个字节 ,为"abcd"
str.empty()——判空

反转相关:
(位于头文件<algorithm>)
[C++] 纯文本查看 复制代码
reverse(str.begin(),str.end())——str的开始 到 结束字符反转 
reverse(s4.begin,s4.end);        结果:s4:ABCD   ->    DCBA



查找相关:
查找成功返回位置 ,查找失败,返回-1

find函数:从头查找

[C++] 纯文本查看 复制代码
str.find('A')——查找 'A'
str.find("ABC")——查找 "ABC"
int n=s4.find("ABC");   s4:ABCD    ->   n = 0

str.find('B',1)——从 位置1 处,查找'B'
str.find("ABC",1,2)——从 位置1 处,开始查找 'ABC' 的前 2个 字符


rfind函数:从尾部查找
[C++] 纯文本查看 复制代码
str.rfind('A')——查找 'A'
str.rfind("ABC")——查找 "ABC"
int n=s4.rfind("ABC");   s4:AAAABCD    ->   n = 3

str.rfind('B',1)——从 位置1 处,向前查找'B'
str.rfind("ABC",1,2)——从 位置1 处,开始向前查找 'ABC' 的前 2个 字符


find_first_of()函数:

查找是否包含有子串中任何一个字符

[C++] 纯文本查看 复制代码
str.find_first_of("abBc")——查找 "abBc" 和str 相等的任何字符,"abBc" 中有就返回位置
str.find_first_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,从 位置1 处,开始查找"abBc" 中的字符,"abBc" 中有的就返回位置
str.find_first_of("abBc",1,2)——查找 "abBc" 和str 相等的任何字符,从 位置1 处,开始查找"abBc" 的前 2个 字符,"abBc" 中有的就返回位置
find_last_of()函数:

find_first_not_of ()末尾查找, 从末尾处开始,向前查找是否包含有子串中任何一个字符

str.find_last_of("abBc")——查找 "abBc" 和str 相等的任何字符,向前查找,"abBc" 中有的返回位置
str.find_last_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,从 位置1 处,开始向前查找"abBc" 中的字符,"abBc" 中有的就返回位置
str.find_last_of("abBc",10,2)——查找 "abBc" 和str 相等的任何字符,从 位置10 处,开始向前查找"abBc" 的前 2个 字符,"abBc" 中有的就返回位置



拷贝相关的:

[C++] 纯文本查看 复制代码
str1=str.substr(2)——提取子串,提取出 str 的 下标为2 到末尾,给 str1
str1=str.substr(2,3)——提取子串,提取出 str 的 下标为2 开始,提取三个字节,给 str1
const char* s1=str.data()——将string类转为字符串数组,返回给s1
char* s=new char[10]

str.copy(s,count,pos)——将 str 里的 pos 位置开始,拷贝 count个 字符,存到 s 里



比较相关的函数:(改部分已经在VS2013中验证,错误已更正,如还有,请指出)

compare函数:(str原串)与(str新串)ASCII值相等返回0;(str原串)小于(str新串)返回-1;(str原串)大于(str新串)返回1。

示例对象:
[C++] 纯文本查看 复制代码
string str(“abcd”)
str.compare(“abcd”)——返回0。
str.compare(“abce”)——返回-1。
str.compare(“abcc”)——返回1。
str.compare(0,2,str,2,2)——用str的 下标0 开始的 2个字符 和 str的 下标2 开始的 2个 字符比较——就是用 "ab" 和 "cd”" 比较,结果返回-1。
str.compare(1,2,”bcx”,2)——用str的 下标1 开始的 2个字符 和 "bcx"的 前 2个 字符比较——就是用 "bc" 和 "bc”" 比较,返回0。





回复

使用道具 举报

694

主题

1080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22794
 楼主| 发表于 2022-7-5 08:41:24 | 显示全部楼层
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	char a[101];
    int n,i;
	gets(a);            //abcd efg
	cout<<strlen(a)<<endl;  //8
	cout<<a<<endl;
	cout<<a[2]<<endl;
}
/*输入
abcd efg
输出
8
abcd efg
c   */
回复

使用道具 举报

694

主题

1080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22794
 楼主| 发表于 2022-9-7 12:25:32 | 显示全部楼层

C++字符串转换(stoi;stol;stoul;stoll;stoull;stof;stod;stold)

[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
    string s1 = "456";
    string s2 = "456.2";
    int i = stoi(s1);
    long l = stol(s1);
    float f = stof(s2);
    double d = stod(s2);
    cout<<i<<endl;
    cout<<l<<endl;
    cout<<f<<endl;
    cout<<d<<endl;

    return 0;
}

回复

使用道具 举报

694

主题

1080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22794
 楼主| 发表于 2022-9-7 12:27:07 | 显示全部楼层

数字转字符串

[C++] 纯文本查看 复制代码
void func3() {
    int i = 123;
    float f = 1.234;
    double d = 2.012;
    cout<<to_string(i)<<endl;
    cout<<to_string(f)<<endl;
    cout<<to_string(d)<<endl;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

小黑屋|东台市机器人学会 ( 苏ICP备2021035350号-1;苏ICP备2021035350号-2;苏ICP备2021035350号-3 )

GMT+8, 2024-4-25 20:10 , Processed in 0.047754 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表