C++之string基本字符系列容器

string基本字符系列容器

C语言只提供了一个插入类型用来处理字符, 而对于字符串, 只能通过字符串数组来处理, 显得十分不便. C++STL提供了string基本字符系列容器来处理字符串, 可以把string理解为字符串类, 它提供了添加, 删除, 替换, 查找和比较等丰富的方法.

虽然使用vector<char>这样的向量也可以处理字符串, 但功能比不上string. 向量的元素类型可以是string, 如vector<string>这样的向量, 实际上就类似于C语言中的字符串数组.

使用string容器, 需要头文件包含声明"#include<string>"

1.1创建string对象

下面这条语句创建了字符串对象s, s是一个空字符串, 其长度为0:

#include<iostream>

#include<string>

using namespace std;

int main()

{

string s;

cout << s.length() << endl;

return 0;

}

1.2给string对象赋值

给string对象赋值一般有两种方式

(1)直接给字符串对象赋值, 如:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "hello, C++STL.";

cout << s << endl;

return 0;

}

(2)更常用的方法是, 把字符指针赋给一个字符串对象:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

char ss[5000];

//scanf的输入速度比cin快得多

//scanf是C语言的函数, 不支持string对象

scanf("%s", &ss);

//把整个字符数组赋值给string对象

s = ss;

//输出字符对象

cout << s << endl;

return 0;

}

1.3从string对象尾部添加字符

在string对象的尾部添加一个字符(char), 采用"+"操作符即可, 具体应用如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = s + ‘a‘;

s = s + ‘b‘;

s = s + ‘c‘;

cout << s << endl;

return 0;

}

1.4从string对象尾部追加字符串

从尾部追加的方式有两种

(1)直接采用"+"操作符, 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = s + "abc";

s = s + "123";

cout << s << endl;

return 0;

}

(2)采用append()方法, 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s.append("abc");

s.append("123");

cout << s << endl;

return 0;

}

1.5给string对象插入字符

可以使用insert()方法把一个字符插入到迭代器位置之前, 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "123456";

//定义迭代器

string::iterator it;

//迭代器位置为字符串首

it = s.begin();

//把字符‘p‘插入到第一个字符前(注意, 字符位置是从0开始计数)

s.insert(it + 1, ‘p‘);

cout << s << endl;

return 0;

}

1.6访问string对象的元素

一般使用下标方式随机访问string对象的元素, 下标是从0开始计数的. 另外, string对象的元素是一个字符(char), 这一点一定要清楚. 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "abc123456";

//输出string对象的首元素

cout << s[0] << endl;

//两个相同的字符相减值为0

cout << s[0] - ‘a‘ << endl;

return 0;

}

1.7删除string对象的元素

(1)清空一个字符串, 则直接给它赋空字符串即可.

(2)使用erase()方法删除迭代器所指的那个元素或一个区间中的所有元素. 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "abc123456";

//定义迭代器变量, 指向字符串对象的首元素

string::iterator it = s.begin();

//删除第3个元素, 元素位置从0开始计数

s.erase(it + 3);

cout << s << endl;

//删除0~4区间的所有元素

s.erase(it, it + 4);

cout << s << endl;

//清空字符串

s = "";

//输出字符串的长度

cout << s.length() << endl;

return 0;

}

1.8返回string对象的长度

采用length()方法可返回字符串的长度; 采用empty()方法, 可返回字符串是否为空, 如果字符串为空, 则返回逻辑真, 即1, 否则, 返回逻辑假, 即0. 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "abc123456";

//输出字符串的长度

cout << s.length() << endl;

//清空字符串

s = "";

//判断字符串是否为空

cout << s.empty() << endl;

return 0;

}

1.9替换string对象的字符

使用replace()方法很方便的替换string对象中的字符, replace()方法的重载函数相当多, 常用的只有一两个, 具体代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "abc123456";

//从第3个开始, 将连续的3个字符替换为"good"

//即将"abc"替换为"good"

s.replace(3, 3, "good");

cout << s << endl;

return 0;

}

/*

abcgood456

*/

1.10搜索string对象的元素或字串

采用find()方法可查找字符串中的第一个字符元素(char, 用单引号界定)或者子串(用双引号界定), 如果查到, 则返回下标值(从0开始计数), 如果查不到, 则返回4294967295.

find()方法有很多重载函数, 下面的代码, 仅举出了一种用法.

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "cat dog cat";

//查找第一个字符‘c‘, 返回下标值

cout << s.find(‘c‘) << endl;

//查找第一个子串"c", 返回下标值

cout << s.find("c") << endl;

//查找第一个子串"cat", 返回下标值

cout << s.find("cat") << endl;

//查找第一个子串"dog", 返回下标值

cout << s.find("dog") << endl;

//查找第一个子串"dogc", 查不到则返回4294967295

cout << s.find("dogc") << endl;

return 0;

}

/*

0

0

0

4

18446744073709551615

*/

1.11string对象的比较

string对象可以使用compare()方法与其他字符串相比较. 如果它比对方大, 则返回1(整数); 如果它比对方小, 则返回-1(负数); 如果它与对方相等, 则返回0. 代码如下:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "cat dog cat";

//s比"cat"字符串大, 返回1

cout << s.compare("cat") << endl;

//s与"cat dog cat"相等, 返回0

cout << s.compare("cat dog cat") << endl;

//s比"dog"小, 返回-1

cout << s.compare("dog") << endl;

return 0;

}

/*

8

0

-1

*/

1.12用reverse反向排序string对象

采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序.

reverse()方法需要声明头文件"#include<algorithm>". 代码如下:

#include<string>

#include<algorithm>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "123456789";

reverse(s.begin(), s.end());

cout << s << endl;

return 0;

}

/*

987654321

*/

1.13string对象作为vector元素

string对象可以作为vector向量的元素, 这种用法, 类似于字符串数组, 代码如下:

#include<vector>

#include<string>

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

vector<string> v;

v.push_back("Jack");

v.push_back("Mike");

v.push_back("Tom");

cout << v[0] << endl;

cout << v[1] << endl;

cout << v[2] << endl;

cout << v[0][0] << endl;

cout << v[1][0] << endl;

cout << v[2].length() << endl;

return 0;

}

/*

Jack

Mike

Tom

J

M

3

*/

1.14string类型的数字化处理

在ACM竞赛中, 常常需要将读入的数字的每位分离出来, 如果采用取余的方法, 花费的时间就会很长, 这时候, 我们可以将读入的数据当成字符串来处理, 这样就方便, 省时多了, 下面这个程序演示了求一个整数各位的和:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

s = "123456789";

int i;

int sum = 0;

for(i = 0; i < s.length(); ++i)

{

if(s[i] == ‘0‘) sum += 0;

else if(s[i] == ‘1‘) sum += 1;

else if(s[i] == ‘2‘) sum += 2;

else if(s[i] == ‘3‘) sum += 3;

else if(s[i] == ‘4‘) sum += 4;

else if(s[i] == ‘5‘) sum += 5;

else if(s[i] == ‘6‘) sum += 6;

else if(s[i] == ‘7‘) sum += 7;

else if(s[i] == ‘8‘) sum += 8;

else if(s[i] == ‘9‘) sum += 9;

}

cout << sum << endl;

return 0;

}

/*

45

*/

1.15string对象与字符数组互操作

下面这个程序演示了字符数组与string对象的输入与输出:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s;

char ss[100];

//输入字符串到字符数组中

scanf("%s", &ss);

//字符数组赋值给字符串对象

s = ss;

//用printf输出字符串对象, 要采用c_str()方法

printf(s.c_str());

cout << endl;

printf("%s", ss);

cout << endl;

cout << s << endl;

cout << ss << endl;

return 0;

}

/*

input:

abc123

output:

abc123

abc123

abc123

abc123

*/

1.16string对象与sscanf函数

在C语言中, sscanf函数很管用, 它可以把一个字符串按你需要的方式分离出子串, 甚至是数字

下面这个程序演示了sscanf函数的具体用法:

#include<string>

#include<iostream>

using namespace std;

int main()

{

string s1, s2, s3;

char sa[100], sb[100], sc[100];

//将字符串分离成子串, 分隔符为空格

sscanf("abc 123 pc", "%s %s %s", sa, sb, sc);

s1 = sa;

s2 = sb;

s3 = sc;

cout << s1 << " " << s2 << " " << s3 << endl;

//将字符串分离成数字, 分隔符为空格

//当用到数字的时候, 跟scanf一样, 它要传指针地址

int a, b, c;

sscanf("1 2 3", "%d %d %d", &a, &b, &c);

cout << a << " " << b << " " << c << endl;

//将字符串分离成数字, 分隔符为","和"$"

//当用到数字的时候, 跟scanf一样, 它要传指针地址

int x, y, z;

sscanf("4,5$6", "%d,%d$%d", &x, &y, &z);

cout << x << " " << y << " " << z << endl;

return 0;

}

/*

abc 123 pc

1 2 3

4 5 6

*/

1.17string对象与数值相互转换

有时候, string对象与数值之间需要相互转换, 下面这个例子详细说明了如何完成该工作的:

#include<iostream>

#include<string>

#include<sstream>

using namespace std;

//C++方法: 将数值转换为string

string convertToString(double x)

{

ostringstream o;

if(o << x)

return o.str();

return "conversion error";//if error

}

//C++方法: 将string转换为数值

double convertFromString(const string &s)

{

istringstream i(s);

double x;

if(i >> x)

return x;

return 0.0;//if error

}

int main()

{

//将数值转换为string的第一种方法: C方法

char b[10];

string a;

sprintf(b, "%d", 1975);

a = b;

cout << a << endl;

//将数值转换为string的第二种方法: C++方法

string cc = convertToString(1976);

cout << cc << endl;

//将string转换为数值的方法: C++方法

string dd = "2006";

int p = convertFromString(dd) + 2;

cout << p << endl;

return 0;

}

/*

1975

1976

2008

*/

原文地址:https://www.cnblogs.com/mjn1/p/10301563.html

时间: 2024-10-12 01:31:44

C++之string基本字符系列容器的相关文章

string基本字符系列容器(一)

由于C语言中只提供了一个char类型用来处理字符,对于字符串的处理,我们往往都是通过字符数组来处理的,这有些时候还是很不方便的. 其实vector<char>就和char类型的数组很像,vector<string>就是字符串类型的数组了. 1.1 创建一个string类型的对象 下面的代码创建了一个字符串对象s,且s是一个空串,他的长度是0, 对于string来说,可以同时用s.length()和s.size()来求长度 # include<iostream> # in

string基本字符系列容器

今天学了关于string的一些基本字符容器,下面我就摘要几种. 一.用reverse反向排序string对象(要用#include<algorithm>头文件) 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 string s; 8 cin>>s; 9 reverse(s.begin(),

string基本字符序列容器(竞赛时常用的使用方法总结)

C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,而C++STL提供了string基本字符序列容器来处理字符串,可以将其理解为字符串类,它提供了添加,删除,替换.查找和比较等丰富.简洁的方法. 下面是在编写代码是的具体应用. 1 //关于C++ STL string基本字符系列容器的学习,看别人的代码一百遍,不如自己动手写一遍. 2 #include <string> 3 #include <vector> 4 #include <iostr

第17章 string基本字符序列容器

/* 第17章 string基本字符序列容器 17.1 string技术原理 17.2 string应用基础 17.3 本章小结 */ // 第17章 string基本字符序列容器 // 17.1 string技术原理 -------------------------------------------------------------------------------------- // 17.2 string应用基础 ----------------------------------

string基本字符序列容器

C语言每天提供专门的字符串类型,需要通过字符数组才能对字符串进行存储和处理.在标准C++中,字符串类由C++ STL实现.string是一个基于字符的序列容器,具有vector向量一样的内部线性结构,字符逐一写入容器,最后以null字符结尾.跟传统的char*字符数组相比,string提供了丰富的函数用于字符的添加.删除.替换.查找和比较等. 创建string对象 主要有以下几种方式. (1)    string() string s; (2)    string(conststring&s,s

C/C++中字符串String及字符操作方法

本文总结C/C++中字符串操作方法,还在学习中,不定期更新... 字符串的输入方法 1.单个单词可以直接用std::cin,因为:std::cin读取并忽略开头所有的空白字符(如空格,换行符,制表符),读取字符直至再次遇到空白字符,读取终止.所以cin只能读取单个单词.显然可以多次使用cin来获取多个单词: 2.多个单词使用函数std::getline(std::cin, s)请看下面代码: #include <iostream> #include <string> int mai

C++string,char* 字符数组,int类型之间的转换

string.int 常见类型之间相互转换 int & string 之间的转换 C++中更多的是使用流对象来实现类型转换 针对流对象 sstream实现 int,float 类型都可以实现 #include <sstream> //int convert to string void int2str(const int &int_temp,string &string_temp){ stringstream s_stream; s_stream<<int_

Docker深入浅出系列 | 容器初体验

Docker深入浅出系列 | 容器初体验 教程目标 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方文档,本章目标如下: 了解什么是Docker 了解Docker解决了什么 了解什么是镜像和容器 了解容器与虚拟机的区别 了解Vagrant与Docker的区别 了解Docker引擎和架构 了解Docker的镜像分层 了解VirturalBox和Do

通过String获取字符数组

方法一: public void getChars(int start,int end,char c[],int offset) 作用是将当前字符串从start到end-1位置上的字符复制到字符数组c中,并从c的offset处开始存放 方法二: String类中toCharArray()方法的用法