zoukankan      html  css  js  c++  java
  • C++中string类常见用法

    string,主要用于字符串处理

    1、字符串的输入

    读入和输出整个字符串,只能用cin和cout

    输入一个字符串s, 如果字符串中有空格 不能用cin,要使用getline(cin,s)

    其中,getline()函数定义在<string>头文件中

    2、字符/字符串与数值转换(C++11)

    字符转化成int型用stoi(s[i])或者s[i]-'0'

    stoi(s)将字符串转换成int型数值

    将数值型转换成string型 用to_string

    eg:to_string(num)将数值类型的变量转换成string类型

    3、字符串的插入insert()

    1)eg:s.insert(1,1,c);

    向s的标号为1的位置插入1个字符c

    2)eg:str1.insert(2,str2,0,4);

    将str2脚标0开始的连续4个字符插入到str1脚标2开始的地方

    4、字符串匹配查找find()

    1)s1.find(s2[i])==string::nops 表示在s1中找不到s2[i]这个字符 返回nops

    应用到两个字符串去重的问题中,可以定义string str  利用字符串的拼接将最后需要输出的内容全部存在str 直接输出即可

    2)

    string str;

    int pos;

    int index=s.find(string  str,  int  pos)

    如果find()函数中除了有被找寻的字符串,还有一位整型数,表示从该位置开始遍历被搜索的字符串,已找到被找寻的字符串。返回的index是str在s中第一次出现的位置

    类比:

    map<string,bool>op

    在map中 使用op.count(dem[i])==1在op中查找是否有key为dem[i]的元素

    5、转换函数to_

    tolower(char/int型变量),不能将整个string一起转换

    6、跟string有关的头文件区分

    #include <cstring>   //不可以定义string s;可以用到strcpy等函数

    using   namespace   std;

    #include <string>   //可以定义string s;可以用到strcpy等函数

    using   namesapce   std;

    #include <string.h>   //不可以定义string s;可以用到strcpy等函数

    7、字符串长度

    在字符串中length()函数和size()函数具有同样的效果

    8、getchar()

    定义在<stdio>头文件中

    getline()之前需要用getchar()吸收空白符,清除缓存区

    getchar函数功能:

    从stdio流中读字符,相当于getc(stdin),它从标准输入里读取下一个字符。返回类型为int型,返回值为用户输入的ASCⅡ码,出错返回-1。

    具体说明:

    1)从缓冲区读走一个字符(相当于清除缓冲区);

    2)前面的scanf()在读取输入时会在缓冲区中留下一个字符' '(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误;

    3)getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab),getchar()使用不方便,解决方法: 

    • 使用下面的语句清除回车: while(getchar()!=' '); 
    • 用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>

    9、gets()函数getline()

    1)gets()是C中的函数,定义在stdio头文件 而不是string.h头文件

    只能在遇到回车或者EOF结束输入 所以gets函数可以用于输入带有空格的字符串。

     eg:

    char a[100];

    gets(a);//gets函数可以直接获得一个数组

    2)getline()是c++中的函数,包含在string头文件里, 与gets()函数功能相似,但是能自定义结束符。

    10、strtok 分割字符串为一组字符串

    1)要使用strtok函数需要包含头文件<string.h>

    或者#include <cstring>

    2)strtok函数的作用是把字符串以规定的字符分割开:

    本质上是将字符串分段,并且除去间隔字符,进行存储

     eg:

    char *p;

    p = strtok(buf, "$");

    p为指针,buf也是指针。这句代码的意思就是把buf中的字符串以"$"为分隔符分割开来,分割出来的字符串保存到指针p中。

    3)再次调用strtok函数时,把buf换成NULL,不需要再写buf。已经分割掉的单位部分用buf字符串上脱落,strtok函数会把分割前的字符串破坏掉,即每次分割后,原来的字符串就会少掉一部分,完整性会被破坏。

    p = strtok(NULL, "$");

    4)p = strtok(buf, "$,");

    这句代码的意思是以"$"和","为分隔符分割buf中的字符串。每当遇到这两个字符其中一个都会分割,不是遇到"$,"两个字符连在一起才分割

    11、获得字符串的子串substr()

    #include<string>

    #include<iostream>

    using namespace std;

    int main()

    {

      string s("12345asdf");

      string a = s.substr(0,5);//获得字符串s中从第0位开始的长度为5的字符串

      cout << a << endl;

    }

    输出结果为:12345

    12、删除字符串的子串erase()

    1)str.erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符

    2)去掉字符串的哪一个字符

    s2.erase(s2.begin());  //去掉第一个元素

    s2.erase(s2.end() - 1); //去掉最后一个元素  end()指向结尾的下一个

    13、字符串替换函数replace

    res[i].replace(pos1, s.length(), d.count(s) ? d[s] : "");

    //字符串res[i]从pos1开始s.length()长的子串替换成d[s]或""

  • 相关阅读:
    ie兼容问题整理
    jQuery Easing 使用方法及其图解
    前端模块化学习
    velocity常用语句速查表
    table插件实现
    表单自动提交问题整理
    移动端开发
    工具的使用及配置
    《TCP/IP详解 卷1:协议》读书笔记
    iOS 内存泄漏
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12743247.html
Copyright © 2011-2022 走看看