string类
声明
#include <string> // 注意这里不是string.h,string.h是C字符串头文件
1、声明一个C++字符串
声明一个字符串变量很简单: string str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把str初始化为一个空字符串。string类的构造函数和析构函数如下:
1) string s; // 生成一个空字符串s 2) string s(str) ; // 拷贝构造函数生成str的复制品 3) string s(str, stridx); // 将字符串str内"始于位置stridx"的部分当作字符串的初值 4) string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值 5) string s(cstr) ; // 将C字符串(以NULL结束)作为s的初值 6) string s(chars, chars_len) ; // 将C字符串前chars_len个字符作为字符串s的初值。 7) string s(num, ‘c’) ; // 生成一个字符串,包含num个c字符 8) string s(“value”); string s=“value”; // 将s初始化为一个字符串字面值副本 9) string s(begin, end); // 以区间begin/end(不包含end)内的字符作为字符串s的初值 10) s.~string(); //销毁所有字符,释放内存
2、string与C字符数组的比较
string串要取得其中某一个字符,和传统的C字符串一样,可以用s[i]的方式取得。比较不一样的是如果s有三个字符,传统C的字符串的s[3]是’\0’字符,但是C++的string则是只到s[2]这个字符而已。
1、C风格字符串
- 用”“括起来的字符串常量,C++中的字符串常量由编译器在末尾添加一个空字符;
- 末尾添加了‘\0’的字符数组,C风格字符串的末尾必须有一个’\0’。
2、C字符数组及其与string串的区别
- char ch[ ]={‘C’, ‘+’, ‘+’}; //末尾无NULL
- char ch[ ]={‘C’, ‘+’, ‘+’, ‘\0’}; //末尾显式添加NULL
- char ch[ ]=”C++”; //末尾自动添加NULL字符 若[ ]内数字大于实际字符数,将实际字符存入数组,其余位置全部为’\0’。

3、string对象的操作
string s; 1) s.empty(); // s为空串 返回true 2) s.size(); // 返回s中字符个数 类型应为:string::size_type 3) s[n]; // 从0开始相当于下标访问 4) s1+s2; // 把s1和s2连接成新串 返回新串 5) s1=s2; // 把s1替换为s2的副本 6) v1==v2; // 比较,相等返回true 7) `!=, <, <=, >, >=` 惯有操作 任何一个大写字母都小于任意的小写字母
当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:
string s1(“hello”); string s3=s1+”world”; //合法操作 string s4=”hello”+”world”; //非法操作:两个字符串字面值相加
4、字符串操作函数
1、string类函数
2、函数说明
1、s.assign();
s.assign(str); // 不说 s.assign(str,1,3); // 如果str是"iamangel" 就是把"ama"赋给字符串 s.assign(str,2,string::npos); // 把字符串str从索引值2开始到结尾赋给s s.assign("gaint"); // 不说 s.assign("nico",5); // 把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串 s.assign(5,'x'); // 把五个x赋给字符串
2、大小和容量函数
3、元素存取
4、比较函数
5、插入字符
6、提取子串s.substr()
s.substr(); // 返回s的全部内容 s.substr(11); // 从索引11往后的子串 s.substr(5,6); // 从索引5开始6个字符
5、字符串流stringstream操作
Iostream标准库支持内存中的输入输出,只要将流与存储在程序内存中的string对象捆绑起来即可。此时,可使用iostream输入和输出操作符读写这个stream对象。使用stringstream,我们必须包含头文件#include。
1、string s
1) >>操作符 // 用于从istream对象中读入输入 2) is >> s; // 从输入流is中读取一个以空白字符分割的字符串,写入s 3) <
<操作符
// 用于把输出写到ostream对象中
4) os << s;
// 将s写到输出流os中
5) getline(
is, s);
// 从输入流is中读取一行字符,写入s,直到遇到分行符或到了文件尾
6) istream
// 输入流 提供输入操作
7) ostream
// 输出流 提供输出操作
操作符>
2、stringstream特定的操作
1) stringstream strm; // 创建自由的stringstream对象 2) stringstream strm(s); // 创建存储s的副本的stringstream对象,s是stringstream类型 3) strm.str(); // 返回strm中存储的string类型对象 4) strm.str(s); // 将string类型的s复制给strm 返回void
3、string到int的转换
string result=”10000”; int n=0; stream<
>n;
// n等于10000
6、C字符串、string串、stringstream之间的关系
首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL(‘\0’)结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。
1、string转换成const char *
string str = "Hello World"; const char *ch1 = str.c_str(); const char *ch2 = str.data();
此时,ch1与ch2的内容将都是”Hello World”。但是只能转换成const char*,如果去掉const编译不能通过。
2、string转换成char *
string str = "Hello World"; int len = str.length(); char *data = new char[len+1]; //这里+1还是不+1需要注意 strcpy(data, str.c_str()); // const char *data = new char[len+1]; strcpy(data, str);
此时,data中的内容为”Hello World”使用c_str()要么str赋给一个const指针,要么用strcpy()复制。
3、char *转换成string
string类型能够自动将C风格的字符串转换成string对象:
string str; const char *pc = "Hello World"; str = pc; printf(“%s\n”, str); //此处出现错误的输出 cout<<str<
printf("%s",str.c_str());
4、char[ ] 转换成string
char ch [] = "ABCDEFG"; string str(ch); //也可string str = ch;
或者
char ch [] = "ABCDEFG"; string str; str = ch; //在原有基础上添加可以用str += ch;
5、string转换成char[ ]
string对象转换成C风格的字符串:
const char *str = s.c_str();
string str = "Hello World"; int len=str.length(); char ch[255]={}; for( int i=0;i<str.length();i++) ch[i] = str[i]; ch[len+1] = '\0'; printf("%s\n", ch); cout<
6、stringstream与string间的绑定
stringstream strm; string s; strm<
// 将s写入到strm strm>>s;
// 从strm读取串写入s
strm.str(); // 返回strm中存储的string类型对象 strm.str(s); // 将string类型的s复制给strm 返回void
char* cstr; // 将C字符数组转换成流 string str(cstr); stringstream ss(str);
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209015.html原文链接:https://javaforall.net
