更简单的字符串操作:C++ string

发布于 / C语言 / Comments Off on 更简单的字符串操作:C++ string

前几天写过一篇C语言的string.h使用方法(传送门:https://www.mmuaa.com/post-80.html

然而发现在windows下Dev-c++可以正常使用,但是在Linux下使用g++编译器有一些函数无法使用,例如strrev等等。而在C++的标准模板库(STL)中为我们提供了更加简单的字符串操作方法。

0x01、定义

首先引入头文件并使用命名空间

#include <string>
using namespace std;

注意,string.h和string不是同一个东西!!!

接着,string就可以作为一个类型去使用了。定义字符串可以这样定义:

string str;

如果想初始化,你也可以这样:

string str = "hahaha";

这样我们就成功定义了一个字符串。

0x02、读入和输出

使用scanf("%s")读取string定义的字符串会导致程序崩溃,我们这里使用cin读入字符串。而cin存在iostream的头文件内,所以在开头添加

#include <iostream>

接着用cin读入

cin>>str;  //读入
cout<<str;  //输出

这里使用了cout进行输出,我们也可以使用printf进行输出:

printf("%s", str.c_str());

这里的c_str()用途是将string类型的字符串转换为char*字符数组

0x03、通过迭代器访问

与vector类似,string也可以通过迭代器进行访问。迭代器,你可以把它理解成是一个指针,指向string中的某个元素。

首先我们定义一个string的迭代器:

string::iterator it;
it = str.begin(); //迭代器it指向string的开头

这时就可以通过*it访问元素了。string的迭代器支持使用*(it + 1)的方式访问元素。

0x04、其他常用函数

str+=  string类型的字符串可以进行类似PHP等语言的字符串拼接,例如

#include <string>
#include <iostream>
using namespace std;

int main(void){
  string str1, str2; 
  cin>>str1;
  cin>>str2;
  str1 += str2;
  cout<<str1<<endl;
  return 0;
}

运行结果

<,>,= string字符串之间可以直接比较大小,比较的规则是字典序。

length(),size() 两个函数都可以返回字符串的长度,即字符数量。时间复杂度为O(1)。注意,一个汉字或占两个字符。例如

#include <cstdio>
#include <string>
using namespace std;

int main(void){
  string str1; 
  cin>>str1;
  printf("%d %d",str1.length(),str1.size());
  return 0;
}

运行结果

insert(x,str) 可以在x位置的后面插入字符串str。时间复杂度为O(str.lengh)。例如

#include <string>
#include <iostream>
using namespace std;

int main(void){
  string str = "abcdefg"; 
  str.insert(2,"ppppp");
  cout<<str<<endl;
  return 0;
}

运行结果

insert(it,it_start,it_end) 这个函数可以将区间表示为[it_start,it_end)范围内的字符串插入到it的位置。这三个参数都是迭代器。

erase(it) 可以删除迭代器it指向的元素。

erase(it_begin,it_end) 可以删除一个区间内的元素。

erase(n,length) 可以删除从n号位置开始(不包括n号位),删掉length个元素。

clear() 可以清空string中的元素。

substr(n,length) 可以返回从n号位置开始,不包括n号位置,长度为length的字符串。

find(str2) 可以用于在str1中查找str2,如果找到了则返回第一次出现str2的位置(第str2+1个字符),如果找不到则返回string::npos。这里string::npos是一个unsign int类型的常量,等于unsign int所能表示的的最大值。这里举一个例子:

#include <cstdio>
#include <string>
#include <iostream>
using namespace std;

int main(void){
  string str; 
  int i = 0;
  while(1){  //便于多次测试 
    cin>>str;
    while(1){
      i = str.find("ha",i) + 1;
      if( i-1 == string::npos ){  //如果没找到,提示没找到,并跳出循环 
        printf("没了,滚吧,再问老子打死你\n");
        break;
      }
      printf("在第%d个字处出现了ha\n",i);
    }
    str.clear();
    i = 0;
  }
  return 0;
}

运行结果

要特别注意find返回的是从0开始查的字符位置,想知道是第几个字符串需要把返回值+1

转载原创文章请注明,转载自: 斐斐のBlog » 更简单的字符串操作:C++ string
评论已关闭