String用法详解

String用法详解string 类声明 string 类本不是 STL 的容器 但是它与 STL 容器有着很多相似的操作 因此 把 string 放在这里一起进行介绍 nbsp 之所以抛弃 char 的字符串而选用 C 标准程序库中的 string 类 是因为他和前者比较起来 不必担心内存是否足够 字符串长度等等 而且作为一个类出现 他集成的操作函数足以完成我们大多数情况下的需要 我们尽可以把它看成是 C 的基本数据类型 nbsp 首先 为了在我们的程序

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

(0)
上一篇 2026年3月19日 上午10:14
下一篇 2026年3月19日 上午10:15


相关推荐

  • linux dhcp服务器搭建_如何自己搭建服务器

    linux dhcp服务器搭建_如何自己搭建服务器本篇是关于在Linux服务器上安装并配置DHCP服务器的配置教程!

    2025年7月27日
    4
  • 互联网公司程序员和外包公司程序员有什么区别?

    互联网公司程序员和外包公司程序员有什么区别?互联网的到来就注定会有外包公司的诞生,起初外包公司给一些不愿意花高代价招程序员的创业型小企业做独立外包,后来渐渐的大型的互联网公司开始出现,他们愿意把一些自己不熟悉或者繁琐的的领域和功能模块外包给专业能力更强的外包团队。从本质上讲,互联网公司和外包公司都是以盈利为己任。但…

    2026年4月16日
    5
  • pycharm导包时出现错误怎么解决_pycharm引入模块报错

    pycharm导包时出现错误怎么解决_pycharm引入模块报错pycharm导包错误没有警告

    2025年6月15日
    6
  • [Git & GitHub] Windows安装git和环境变量配置

    [Git & GitHub] Windows安装git和环境变量配置下载安装 1 从 git 官网下载一个 git 安装包 官网下载地址 http www git scm com download 2 双击安装程序 如果没有 SecurityWarn 请跳过此步骤 请点击 Run gt 3 阅读协议 点击 Next gt 4 选择安装位置 点击 Next gt 5 选择安装组件 这里可以使用默认选项 点击 Next

    2026年3月17日
    3
  • 开源报表工具 java_java生成报表

    开源报表工具 java_java生成报表BestOpenSourceReportingTools一文列出目前比较好的几种开源报表工具1.BIRTProjectBIRT是基于Eclipse的报表系统,很有竞争力。2.Pentaho侧重于从各种现有系统输出创建产生丰富复杂的报表内容。3.OpenRPTxTupleERPEditions的一部分,侧重ERP领域的报表4.OpenReports基于浏览器参数驱动动态报…

    2022年10月20日
    5
  • python冒泡排序代码和注释_Python 冒泡排序

    python冒泡排序代码和注释_Python 冒泡排序冒泡排序(BubbleSort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢”浮”到数列的顶端。见下图:方法一:常规实现冒泡排序#方法1#定义一个列表,用于存放数字list=[]whileTrue:#…

    2022年10月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号