首页 > 编程语言 >C++_22_string类型 - 重写版

C++_22_string类型 - 重写版

时间:2023-11-05 23:24:53浏览次数:37  
标签:string 22 int s2 s1 C++ 字符串 include

string类型·变量定义

  C++ 中提供了一个 string 内建数据类型,它可以替代 C 语言中的 char* 数组。
  使用 string 数据类型时,需要在程序中包含头文件<string>

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

int main()
{
    string s1;                 //定义s1未能初始化,默认赋值s1为" "(空字符串);
    string s2 = "string";    //定义s2初始化赋值为字符串"string",但是结尾没有'\0'
    string s3 = s2;        //定义s3直接用s2初始化,s3 的内容也是 "string";
    string s4 (10, 's');       //定义s4初始化为10个's'字符组成的字符串,即 "ssssssssss"。
    return 0;
}
//string类型定义的变量可以通过3种方式赋值:“=”赋值操作符、string类型变量或者字符串赋值、括号赋值

  string 类型的本质是一个 string 类,而我们定义的变量则是一个个的 string 类的对象
    
因此可以出现s1.c_str() 用法

 

string s = "string";
int len = s.length();

  string类型为我们提供length函数来返回得到变量的字符串长度
  且因为string类型字符串后没有'\0',所以返回值就是实际字符串长度

 

转化为char数组字符串

  C++中可以使用string类型来代替C语言中的char*字符串,但是为便于实际编程中灵活运用;
  系统为我们提供一个转化函数 c_str();将string类型变量转化为一个const字符串数组指针char*类型)

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

int main(int argc, char const *argv[])
{
    string filename = "hello world";
    string newname = filename.c_str();
    cout << filename << endl;
    cout << newname << endl;
    cout << "length(filename) = " << filename.length() << endl;
    cout << "length(newname) = " << newname.length() << endl;
    return 0;
}
输出:
zl@LAPTOP-67MRI3LV:/mnt/d/VsCode$ ./1
hello world
hello world
length(filename) = 11
length(newname) = 11

 

string类型变量的输入和输出

  string类型变量的输入输出和其他类型变量一样

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    cin>>s;
    cout<<s<<endl;
    return 0;
}

 

string类型字符串的连接

  对于 string 类型变量,我们可以直接用“+”或者“+=”进行字符串的连接。
    用“+”风格字符串进行字符串连接时,操作符左右两边一边是 string 字符串,另一边可以是一个 string 字符串和一个 C 风格的字符串或者一个 char 字符。
    用“+=”风格字符串进行字符串连接时,操作符右边既可以是一个 string 字符串,也可以是一个 C 风格字符串或一个 char 字符。

 

修改字符串

  string类型字符和字符串数组(char *)类似,string 字符串也可以按照下标逐一访问每一个字符,string 字符串的起始下标仍是从 0 开始。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1 ;
    s1 = "1234567890";
    for(int i=0; i<s1.length(); i++)
        cout<<s1[i]<<" ";
    cout<<endl;
    s1[5] = '5';
    cout<<s1<<endl;
    return 0;
}

  操作string类型变量函数
    string erase()函数 ------- 删除子字符串
      erase() 函数有两个参数:第一个参数是要删除的子字符串的起始下标;
                   第二个参数是要删除子字符串的长度;
      如果第二个参数不指明,则从第一个参数获取起始下标,然后一直删除至字符串结束。
      待删除字符串最多删除至字符串结尾

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2, s3;
    s1 = s2 = s3 = "1234567890";
    s2.erase(5);
    s3.erase(5, 3);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    cout<< s3 <<endl;
    return 0;
}

运行:
1234567890
12345
1234590

    string insert()函数 ------- 插入子字符串
      insert() 函数同样有两个参数:第一个参数表示插入位置,
                    第二参数表示要插入的字符串,
      第二个参数既可以是 string 变量,又可以是 C 风格的字符串。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2, s3;
    s1 = s2 = "1234567890";
    s3 = "aaa";
    s1.insert(5, s3);
    cout<< s1 <<endl;
    s2.insert(5, "aaa");
    cout<< s2 <<endl;
    return 0;
}
答案:
12345aaa567890
12345aaa567890

    string replace()函数 ------- 替换子字符串
      replace() 函数有三个参数:第一个参数表示待替换的子字符串的其实下标,
                   第二个参数表示待替换子字符串的长度,
                   第三个参数表示要替换子字符串的字符串。
      第三个参数同样可以是 string 类型变量或 C 风格字符串。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2, s3;
    s1 = s2 = "1234567890";
    s3 = "aaa";
    s1.replace(5, 4, s3);
    cout<< s1 <<endl;
    s2.replace(5, 4, "aaa");
    cout<< s1 <<endl;  
    return 0;
}
答案:
12345aaa0
12345aaa0

    string swap()函数 ------- 互换两个string类型的值

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1 = "string";
    string s2 = "aaaaaa";
    s1.swap(s2);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    return 0;
}
答案:
aaaaaa
string

 

 

 

提取子字符串

  substr() 函数可以提取 string 字符串中的子字符串,该函数有两个参数,第一个参数为需要提取的子字符串的起始下标,第二个参数是需要提取的子字符串的长度。

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

int main()
{
    string s1 = "first second third";
    string s2;
    s2 = s1.substr(6, 6);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    return 0;
}
答案:
first second third
second

 

 

查找字符串

   find() 函数可以在字符串中查找子字符串中出现的位置。
    该函数有两个参数:第一个参数是待查找的子字符串;
             第二个参数是表示开始查找的位置(字符串下标)。
    如果第二个参数不指名的话则默认从 0 开始查找,也即从字符串首开始查找。

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

int main()
{
    string s1 = "first second third";
    string s2 = "second";
    int index = s1.find(s2,5);
    if(index < s1.length())
        cout<<"Found at index : "<< index <<endl;
    else
        cout<<"Not found"<<endl;
    return 0;
}

  函数返回的是子字符串出现在字符串中的起始下标。如果没有查找到子字符串,则返回一个无穷大值。

  rfind() 函数与 find() 函数很类似,同样是在字符串中查找子字符串。
  不同的是,find() 函数是从第二个参数开始往后查找,
          rfind() 函数则是最多查找到第二个参数处,如果没有找到子字符串,则返回一个无穷大值。

 

 

字符串的比较

   ==!=<=>=<>操作符都可以用于进行 string 类型字符串的比较,这些操作符两边都可以是 string 字符串,也可以一边是 string 字符串另一边是字符串数组。

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

int main()
{
    string s1 = "secondsecondthird";
    string s2 = "secondthird";
    if( s1 == s2 )
        cout<< " == " <<endl;
    if( s1 != s2 )
        cout<< " != " <<endl;
    if( s1 < s2 )
        cout<< " < " <<endl;
    if( s1 > s2 )
        cout<< " > " <<endl;
    return 0;
}

 

  

 

标签:string,22,int,s2,s1,C++,字符串,include
From: https://www.cnblogs.com/zlxxc/p/17811533.html

相关文章

  • C++_21_重载、重写、重定义 - 重写版
    1、重载同一作用域的同名函数,重复定义;参数格式、参数顺序或者参数类型不同;函数重载和函数的返回值没有任何关系;(const类型的重载本质上是参数类型不同) 2、重写(覆盖)有继承关系子类(派生类)重写父类(基类)的虚函数函数的返回值,函数名字,函数参数,必须和基类中的虚函数一致,主要就是覆盖......
  • C++_20_操作符重载和函数重载 - 重写版
    操作符(运算符)重载 操作符重载指的是将C++提供的操作符进行重新定义或者多重定义,使之满足我们所需要的一些功能。在C++中,经常有需要对多个对象进行算术运算,但是对象比不是基本的数据类型,所以这些运算符都无法执行。为了让程序识别这些运算符,就需要对运算符进行重载......
  • C++_19_虚函数、纯虚函数和抽象类 - 重写版
    虚(成员)函数:在C++中,只有类中的成员函数能被声明为虚函数,顶层函数则不能被声明为虚函数;并且如果在类内声明类外定义,则只在类内声明时加virtual声明虚函数是为了构成多态,多态需要继承关系,需要在类中声明;虚函数能被继承:基类被声明为虚函数,那么派生类即便未添......
  • C++_25_函数模板和类模板 - 重写版
    模板:在C++中允许函数重载,但函数重载每次都必须完全对上参数的顺序,类型和数量。所以C++提供了另一种代码重用机制——“模板”,可以作为同一种类型函数的统一调用接口。模板机制下可划分:1、函数模板      2、类模板模板的语......
  • C++_28_空指针、野指针、智能指针 - 重写版
     野指针:没有明确执向的指针,可能会胡乱指向任意一个变量;编程的时候绝不允许出现野指针;int*p;//错误,未初始化指向一块地址,会变成野指针如果确实需要先不指定到需要使用的内存,那就先定义一个空指针;-------》宁愿指向为空也不要为野;因为野指针你把握不住; 空指针:让指针指向N......
  • C++_02_命名空间和作用域运算符 - 重写版
    命名空间在C++中命名空间(namespace)的作用:命名空间,就是为了解决同一个源代码中相同命名的变量或者函数之间相互冲突的问题,就是要避免这种冲突,让程序代码中可以多次使用同一个标识符而存在的。对于一名开发者而言,代码量过于庞大,或多或少会忘记之间之前用过的变量名或函......
  • C++_01_初步认识C++语言 - 重写版
    一、认识“C++语言”一、首先聊聊什么是语言?语言是一套具有“语法”、“词法”规律的系统,是思维的工具。计算程序设计语言是计算机可以识别的语言,用于描述解决问题的方法,供计算机阅读和执行。语言由低级到高级依次分为4类:1、机器语言     (由......
  • C++_28_重载、重写、重定义
    1、重载同一作用域的同名函数,重复定义;参数格式、参数顺序或者参数类型不同;函数重载和函数的返回值没有任何关系 2、重写  3、重定义......
  • 2023-2024-1 20231422 《计算机基础与程序设计》第六周学习总结
    这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2023-2024-1计算机基础与程序设计第六周作业)这个作业的目标<写上具体方面>作业正文https://www.cnblogs.com/Augenstern4545/p/17811254.html本博......
  • java string方法的具体讲解和举例说明
    在Java中,String类提供了一系列用于操作字符串的方法。下面是一些常用的String方法及其用法的示例:1.length()返回字符串的长度(字符数)。Stringstr="Hello";intlen=str.length();//len=52.charAt(intindex)返回指定索引处的字符。charch=str.charAt(0);//ch......