string基本字符系列容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: string基本字符系列容器

string基本字符系列容器

  • STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供了添加、删除、替换、查找和比较等丰富的方法。
  • 向量的元素类型可以是string,如vector这样的向量,实际上就类似于C语言中的字符串数组。
  • 使用string容器,需要头文件包含声明“ #include ”

基本使用

创建string对象

  • 创建一个字符串对象s, s是一个空字符串,其长度为0:
string s;

获取字符串长度 s.length( )

给string对象赋值

  • 直接给字符串对象赋值
s="hello,wakaka";
  • 把字符指针赋给一个字符串对象
string s; 
char ss[5000]; 
//scanf的输入速度比cin快得多 
//scanf是C语言的函数,不支持string对象 
scanf("%s", ss);
//把整个字符数组赋值给string对象 
s=ss;
#include<iostream>
using namespace std;
int main(){
  string s1,s2;
  char c[20];
  s1="hello,wakaka";
  scanf("%s",c);
  s2=c;
  cout<<s1.length()<<endl; 
  cout<<s2.length()<<endl;
  return 0; 
}

在字符串对象尾部添加字符

  • 使用 + 操作符即可
s=s+'b';
  • string对象尾部追加字符串
  • 直接使用 + 操作符
s=s+"123";
  • 使用append()方法
s.append("abc");
#include<iostream>
using namespace std;
int main(){
  string s;
  s="hello,wakaka";
  s=s+"123";
  s.append("abc");
  cout<<s<<endl; 
  return 0; 
}
  • 给string对象插入字符
  • 可以使用insert()方法把一个字符插入到迭代器位置之前
    插入的必须是字符
//定义迭代器
 string::iterator it;
//迭代器位置为字符串首
it=s.begin();
//把字符’p’插入到第1个字符前(注意,字符位置是从0开始计数)
s.insert(it+1, 'p');

访问string对象的元素

  • 使用下标方式随机访问string对象的元素,下标是从0开始计数的
    string对象的元素是一个字符(char)
s[0];

删除string对象的元素

  • 清空一个字符串,则直接给它赋空字符串即可。
  • 使用erase()方法删除迭代器所指的那个元素或一个区间中的所有元素。
  • 左闭右开 [ )
#include<iostream>
using namespace std;
int main(){
  string s;
  s="hello,wakaka";
  s.erase(s.begin(),s.begin()+2);
  cout<<s<<endl; 
  return 0; 
}

返回string对象的长度

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

替换string对象的字符

  • 使用replace()方法可以很方便地替换string对象中的字符
string s;
s="abc123456";
//从第3个开始,将连续的3个字符替换为“good”
//即将“123”替换为“good”
s.replace(3,3, "good");

搜索string对象的元素或子串

  • 采用find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定),如果查到,则返回下标值(从0开始计数),如果查不到,则返回4294967295(一个很大的数)。
string s;
s="cat dog cat";
//查找第一个字符‘c',返回下标值
s.find('c');
//查找第一个子串“c”,返回下标值
s.find("c");

string对象的比较

  • string对象可与使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;如果它比对方小,则返回-1;如果它与对方相同(相等),则返回0。
s.compare("cat")

用reverse反向排序string对象

  • 采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序。
  • 声明头文件“#include ”
reverse(s.begin(), s.end());

string对象作为vector元素

  • 类似于字符串数组
vector<string> v;

string类型的数字化处理

  • 将读入的数字的每位分离出来,如果采用取余的方法,花费的时间就会太长,这时候,我们可以将读入的数据当成字符串来处理。
//计算输入整数数据的每位的和 
  string s;
  cin>>s;
  int num;
  for(int i=0;i<s.length();i++){
    num+=s[i]-48; 
  } 
  cout<<s<<endl;
  cout<<"sum:"<<num<<endl;

string对象与字符数组互操作

  • 字符数组ss赋值线字符串对象s
s=ss;
  • 采用c_str()方法
s.c_str();
  • c_str()函数声明: const char* c_str();
  • c_str()函数返回一个指向c字符串的指针,内容与本string串相同。
  • c中没有string类型,必须通过string类对象成员函数c_str()把string对象转换成c中的字符串。
  • 要通过strcpy()函数等来操作c_str()返回的指针。
strcpy(c,s.c_str());
  • c_str()返回的是一个分配给const char*的地址,其内容已经设定为不可变更,如果把此地址赋给一个变更内容的char*变量,就会冲突。
//使用printf()不需要格式控制字符串,也可以直接输出目标字符串
char a[10]="aaaa";
printf(a);

string对象与sscanf函数

  • sscanf函数,可以把一个字符串按需要的方式分离出子串,甚至是数字。
//将字符串分离成子串,分隔符为空格,分割后的子字符数组,可以赋值给string容器对象
sscanf("abc 123 pc", "%s %s %s", sa, sb, sc);
//将字符串分离成数字,分隔符为空格
//当用到数字的时候,跟scanf一样,它要传指针地址
int a, b, c;
sscanf("1 2 3", "%d %d %d", &a, &b, &c);
//将字符串分离成数字,分隔符为“,”和“$”
//当用到数字的时候,跟scanf一样,它要传指针地址
int x, y, z;
 sscanf("4,5$6", "%d, %d$%d", &x, &y, &z);

string对象与数值相互转换

  • 将数值转换为string的第一种方法sprintf()
char a[10];
string s;
sprintf(a, "%d",1975);
//赋值给string对象
s=a;
cout<<s<<endl;
  • C++方法:将数值转换为string

使用ostringstream、istringstream类要包含头文件

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
}
相关文章
|
13天前
|
C++ 索引 容器
c++string容器-子串获取讲解
c++string容器-子串获取讲解
49 0
|
13天前
|
存储 C++ 索引
C++ string容器-字符存取讲解
C++ string容器-字符存取讲解
34 0
|
13天前
|
C++
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
56 0
|
3天前
|
存储 Java 编译器
String能存储多少个字符?
这篇内容讨论了Java中String的长度限制。编译时,如果字符串长度大于等于65535,编译器将报错。这是由于`CONSTANT_Utf8`常量池项的长度字段是16位无符号整数,最大值为65535。而在运行时,虽然理论上String的最大长度是2^31-1,但实际长度受限于JVM内存,最大可能占用约2GB内存,超过可能导致OutOfMemoryError。JDK9以后,对于LATIN1字符的字符串,存储优化使用byte数组,节省内存。
String能存储多少个字符?
|
4天前
|
C++ 容器
黑马c++ STL部分 笔记(2) string容器
黑马c++ STL部分 笔记(2) string容器
|
13天前
|
存储 缓存 Java
|
13天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
13天前
|
存储 Java
JAVA中String长度限制解决超出字符长度
JAVA中String长度限制解决超出字符长度
23 1
|
13天前
|
存储 算法 C++
string容器一字符事查找和替换
string容器一字符事查找和替换
13 0
|
13天前
|
存储 C++ 索引
C++中的string容器及字符串拼接操作讲解
C++中的string容器及字符串拼接操作讲解
22 3