关闭

C++入门学习——标准库 string 类的使用

标签: c++string
1089人阅读 评论(0) 收藏 举报
分类:

在 C++ 中,为了方便处理字符串,引入了 string 类。string 类型支持长度可变的字符串。


使用 string 之前,必须包含相应的头文件,string 属于 std 命名域的,因此需要通过命名限定:

#include <string>
using std::string; //using namespace std;


string对象的定义和初始化



使用示例如下:

#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[])
{
	string s1 = "mike";
	cout << "s1 = " << s1 << endl; //s1 = mike
	
	string s2(s1); //将 s2 初始化为 s1 的一个副本
	cout << "s2 = " << s2 << endl; // s2 = mike
	
	string s3("jiang"); //将 s3 初始化为 "mike"
	cout << "s3 = " << s3 << endl; // s3 = jiang
	
	string s4(10, 'a'); // s4 的值为 10 个 'a'
	cout << "s4 = " << s4 << endl; //s1 = mike
	
	return 0;
}


运行结果如下:


string 对象常用操作


示例代码如下:

#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[])
{
	string s1 = "mike";
	
	// 如果s1为空串,则返回true,否则返回false
	if( true == s1.empty() ){
		cout << "s1 is empty\n";
	}else{
		cout << "s1 is no empty\n";
	}
	
	// 字符串的大小, s1.size()等价于s1.length()
	cout << "len = " << s1.size() << endl;
	
	//返回 s1 最大容量
	cout << "max_size = " << s1.max_size() << endl;
	
	//取出每一个字符
	for(int i = 0; i < s1.size(); i++){
		//s1[i]等价于s1.at(i)
		cout << i << " = " << s1[i] << endl;
	}
	
	string s2 = " jiang";
	cout << "s1 + s2 = " << s1+s2 << endl;
	
	// c++ string 和 C char * 相互转换
	// string to const char *
	const char *str = s1.c_str();
	cout << "c_str = " << str << endl;
	
	const char *data = s2.data();
	cout << "data = " << data << endl;
	
	// char * to string
	const char *buf = "hello, c++";
	//string my_str = string(buf);
	string my_str = buf;
	cout << "my_str = " << my_str << endl;
	
	//s1和s2字符串交换
	s1 = "mike";
	s2 = "jiang";
	s1.swap(s2);
	cout << "s1 = " << s1 << ", s2 = " << s2 << endl;
	
	s1.clear();
	s1 = "mike";
	cout << "s1 = " << s1 << endl;
	
	s1 = "mikejiang";
	//取出 s1 从 2 开始后的 4 个字符,位置从0开始
	s2 = s1.substr(2, 4);
	cout << "s2 = " << s2 << endl;
	
	s1 = "mikejiang";
	//删除 s1 从 2 开始后的 4 个字符,位置从0开始
	s2 = s1.erase(2, 4);
	cout << "s2 = " << s2 << endl;
	
	s1 = "mike";
	//s1 从 4 开始(位置从0开始),插入"jiang"字符串
	s2 = s1.insert(4, "jiang");
	cout << "s2 = " << s2 << endl;
	
	s1="mikejiang";
	//删除s1从4开始的5个字符,然后在5位置处插入"tyson"
	s2 = s1.replace(4, 5, "tyson");
	cout << "s2 = " << s2 << endl;
	
	s1="mikejiang";
	//查找字符串"j"在s1中的位置(位置从0开始)
	int n = s1.find("j");
	cout << "n = " << n << endl;
	
	return 0;
}


运行结果如下:



迭代器操作 string 对象

string 类提供了向前和向后遍历的迭代器 iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。用 string::iterator 或 string::const_iterator 声明迭代器变量,const_iterator 不允许改变迭代的内容。


示例代码如下:

#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[])
{	
	string s="mike"; //初始化为"mike"
	
	//通过迭代器把所有字符元素的值打印出来
	string::const_iterator t;
	for( t=s.begin(); t!=s.end(); t++){
		cout<< *t << ", ";
	}
	cout << endl;
	
	string::iterator it;
	//通过迭代器给所有字符元素赋值为'a'
	for( it=s.begin(); it!=s.end(); it++){
		*it = 'a';
	}

	cout << endl;
	//通过迭代器把所有元素的值打印出来
	for( it=s.begin(); it!=s.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	
	s = "mikejiang";
	it = s.begin(); //返回指string最开始位置元素的指针(迭代器)
	//删除指针it+1指向位置的元素,返回指向下一个元素位置的指针(迭代器)
	s.erase(it+1); // remove "i"
	
	cout << endl << "after erase:\n";
	//通过迭代器把所有元素的值打印出来
	for( it=s.begin(); it!=s.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	s = "mmmmmm";
	it = s.begin(); 
	//在位置it后插入3个'a'
	s.insert(it, 3, 'a');
	
	cout << endl << "after insert:\n";
	//通过迭代器把所有元素的值打印出来
	for( it=s.begin(); it!=s.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	return 0;
}

运行结果如下:



string 类型还支持大多数顺序容器操作。在某些方面,可将 string 类型视为字符容器。除了一些特殊操作,string 类型提供与 vector 容器相同的操作。string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器: 在 string 类型中不能使用 front、 back 和 pop_back 操作。


本教程示例代码下载请点此链接:http://download.csdn.net/detail/tennysonsky/8896441

5
0
查看评论

【c++】标准库中string类的使用、示例验证及注意点

/* ************************************************************************** * File Name: string_test.c * Function : 1) * 2) * Author ...
  • qq_30594349
  • qq_30594349
  • 2017-02-13 11:13
  • 347

Unix/Linux C++应用开发-标准库字符串string类

针对字符串处理,C++中并没有专门的内置类型。C语言是使用字符数组以及相应的指针来表示字符串。前面章节已经介绍了C++包容的C语言字符串处理方式。下面将讲解C++标准库封装字符串处理的字符串类类型。通过库提供的字符串类型公开方法接口,开发者可以很方便地定义操作字符串,使得操作字符串变得方便简易。
  • wangfengwf
  • wangfengwf
  • 2013-09-11 21:11
  • 9447

C++标准库——字符串(Standard library: String)

Reference:The C++ Programming Language 4th edition (Bjarne Stroustrup) 1.字符分类(Character Classification) #include isspace(c) //' ', '\t&...
  • hrzr79011
  • hrzr79011
  • 2015-05-10 08:17
  • 795

Linux下C++标准文件库编程

分类: Linux c++开发 电子书 2013-09-11 21:34 1074人阅读 评论(0) 收藏 举报 目录(?)[+] 19.1 Linux下C++文件的创建 C++语言将每个文件都看成一个有序的字节流,每一个文件通常都可以以文件的结束符EO...
  • tangzhilinhk
  • tangzhilinhk
  • 2014-07-10 11:50
  • 779

c++标准库——容器类

容器类可以分为两大类和容器适配器: (1)序列容器(Sequence containers) 这种容器中的元素是有序的,每一个元素在容器中都有一个确切的位置,这个位置不依赖于元素的值,而是跟放入容器的时机有关。标准的序列容器有三个:vector, deque, list。另外你也可以...
  • github_35845686
  • github_35845686
  • 2016-09-12 16:00
  • 181

c++ string类的使用方法

相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给...
  • yaoxingshuai
  • yaoxingshuai
  • 2016-08-27 19:34
  • 896

C++ 标准库string类

标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧,好了,废话少说,直接进入正题吧! 要想使用标准C++中string类,必须要包含 #include // 注意是,不是,带.h的是C语言中的头文件...
  • u013174512
  • u013174512
  • 2016-04-27 15:20
  • 209

C标准库这本书怎么样

关于C标准库 评论读后感:本书对深入研究标准C库源码有一定帮助读后感:恩,不错,就是太贵了啊。。。。读后感:非常不错的一本书 个人非常推荐也非常喜欢读后感:C标准库是一本好书,当然得是你愿意读书并有大把时间的情况下读后感:我觉得提供的函数能再多些就更好了C标准库 当当上购买 当当网全场免运费...
  • lang_csdn
  • lang_csdn
  • 2010-12-07 13:54
  • 668

c++ string 类基本用法

C++中string是标准库中一种容器,相当于保存元素类型为char的vector容器(自己理解),这个类提供了相当丰富的函数来完成对字符串操作,以及与C风格字符串之间转换,下面是对string一些总结   一,C语言的字符串 在C语言里,对字符串的处理一项都是一件比较痛...
  • u014082714
  • u014082714
  • 2015-03-16 20:44
  • 1526

[C++]详解异常处理(Exception Handling) 及标准库异常处理类

详解异常处理(Exception Handling) 及标准库异常处理类 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助...
  • stary_yan
  • stary_yan
  • 2016-04-30 11:00
  • 983
    打赏
    有钱捧个钱场,没钱碰个人场,谢谢大家!

    个人资料
    • 访问:5553434次
    • 积分:22334
    • 等级:
    • 排名:第383名
    • 原创:295篇
    • 转载:74篇
    • 译文:9篇
    • 评论:285条
    相关声明
    博客专栏
    最新评论