(C++递归预习到了string类型,这个是处理字符串的一个非常好用的东西,在C里面没有.今天来学习一下)

顺便推荐一个很不错的网站:http://c.biancheng.net/view/400.html

首先,为了在程序中使用string类型,必须包含头文件 <string>。如下:

#include <string>

(注意这里不是string.h,string.h是C字符串头文件。)

string类是一个模板类,位于名字空间std中,通常为方便使用还需要增加:

using namespace std;

声明一个字符串变量很简单:

string str;

一.对象赋值:

  string str;  //定义了一个空字符串str

     str = "Hello world";   // 给str赋值为"Hello world"

     char cstr[] = "abcde";  //定义了一个C字符串

     string s1(str);       //调用复制构造函数生成s1,s1为str的复制品

     cout<<s1<<endl;

     string s2(str,);     //将str内,开始于位置6的部分当作s2的初值

     cout<<s2<<endl;

     string s3(str,,);  //将str内,开始于6且长度顶多为3的部分作为s3的初值

         cout<<s3<<endl;

     string s4(cstr);   //将C字符串作为s4的初值

     cout<<s4<<endl;

     string s5(cstr,);  //将C字符串前3个字符作为字符串s5的初值。

     cout<<s5<<endl;

     string s6(,'A');  //生成一个字符串,包含5个'A'字符

     cout<<s6<<endl;

     string s7(str.begin(),str.begin()+); //区间str.begin()和str.begin()+5内的字符作为初值

     cout<<s7<<endl;

     return ;

输出:

Hello world


world


wor


abcde


abc


AAAAA


Hello


二.比较

好不容易把各种string赋上你想要的值,现在我们开始比较.

string类型支持><+==这些字符串里根本做不到的比较.

  string str;

     cout << "Please input your name:"<<endl;

     cin >> str;

     if( str == "Li" )   // 字符串相等比较

         cout << "you are Li!"<<endl;

     else if( str != "Wang" )  // 字符串不等比较

         cout << "you are not Wang!"<<endl;

     else if( str < "Li")     // 字符串小于比较,>、>=、<=类似

         cout << "your name should be ahead of Li"<<endl;

     else

         cout << "your name should be after of Li"<<endl;

     str += ", Welcome!";  // 字符串+=

     cout << str<<endl;

     for(int i =  ; i < str.size(); i ++)

         cout<<str[i];  // 类似数组,通过[]获取特定的字符

     return ;

三.特性函数

string有很多它自己的函数

int capacity()const;    //返回当前容量(即string中不必增加内存即可存放的元素个数)

int max_size()const;    //返回string对象中可存放的最大字符串的长度

int size()const;        //返回当前字符串的大小

int length()const;       //返回当前字符串的长度

bool empty()const;        //当前字符串是否为空

void resize(int len,char c);  //把字符串当前大小置为len,多去少补,多出的字符c填充不足的部分

用的时候:

str.capacity=...

代码:

     string str;

         if (str.empty())//判断是不是空的

         cout<<"str is NULL."<<endl;

         else

         cout<<"str is not NULL."<<endl;

     str = str + "abcdefg";//string可以直接加

     cout<<"str is "<<str<<endl;

         cout<<"str's size is "<<str.size()<<endl;//   str's size is 7(size 是字符数,类似strlen)

        cout<<"str's capacity is "<<str.capacity()<<endl;//str's capacity is 15  

     cout<<"str's max size is "<<str.max_size()<<endl;//str's max size is 4294967294

     cout<<"str's length is "<<str.length()<<endl;//str's length is 7 (其实和size是一样的)

     str.resize(,'c');(20个字符,空位补c)

     cout<<"str is "<<str<<endl;//str is abcdefgccc

     str.resize();(5个字符,多的删掉)

     cout<<"str is "<<str<<endl;//str is abcde

     return ;
 #include <iostream>
#include <string> using namespace std;
int main()
{
string str1 = "abc123defg";
string str2 = "swap!";
cout<<str1<<endl;
cout<<str1.erase(,)<<endl;
//从索引3开始的3个字符,即删除掉了"123"
cout<<str1.insert(,"")<<endl;
//在头部插入
cout<<str1.append("")<<endl;
//append()方法可以添加字符串
str1.push_back('A'); //push_back()方法只能添加一个字符
cout<<str1<<endl;
cout<<str1.replace(,,"hello")<<endl;
//即将索引0开始的3个字符替换成"hello"
cout<<str1.substr(,)<<endl;
//从索引5开始7个字节
str1.swap(str2);
cout<<str1<<endl;
const char* p = str.c_str();
printf("%s\n",p);
return ;
}

string类型 C++的更多相关文章

  1. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  2. 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗

    碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...

  3. C#string类型总结

    字符串的特性:不可变性,每对字符串做拼接或者重新赋值之类的操作,都会在内存中产生一个新的实例.  所以说,在.Net平台下,如果你对一个字符串进行大量的拼接赋值等操作,会产生大量的垃圾.    --- ...

  4. 把《c++ primer》读薄(3-1 标准库string类型初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...

  5. 【原创】Java和C#下String类型中的==和equals的原理与区别

    一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...

  6. String类型的属性和方法

    × 目录 [1]属性 [2]对象通用方法 [3]访问字符方法[4]字符串拼接[5]创建子串方法[6]大小写转换[7]查找子串位置[8]正则匹配方法[9]去除首尾空格[10]字符串比较 前面的话 前面已 ...

  7. String类型传值以及对象传值

    package Virtual; class Stan{ String mm = "hello"; } class Virtual { public static void mai ...

  8. java动手动脑和课后实验型问题String类型

    1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...

  9. java内存分配和String类型的深度解析

    [尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...

  10. javascript类型系统——字符串String类型

    × 目录 [1]定义 [2]引号 [3]反斜线[4]特点[5]转字符串 前面的话 javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串S ...

随机推荐

  1. python中 _、__、__xx__() 区别及使用场景

    1.访问权限(private.public)与继承方式(只有public继承) 在面向对象编程语言中,类的属性与方法都会设置访问控制权限,从而满足我们的设计需求.一般而言,我们通常会将对象的属性设置为 ...

  2. js进度条

    第一步//====================.wrap,.circle,.percent{                  position: absolute;                ...

  3. centos-docker安装及基本使用

    1.安装 1.安装之前 网络重启:service network restart 查看IP地址:ip addr 查看内核版本:uname -r 2.linux上安装docker 1.查看内核版本:un ...

  4. tyvj 1198 矩阵连乘——区间dp

    tyvj 1198 矩阵连乘 题目描述 一个n*m矩阵由n行m列共n*m个数排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算 ...

  5. day77 vue对象提供的属性功能

    目录 一.过滤器 二.计算属性(computed) 三.侦听属性(watch) 四.vue对象的生命周期 五.阻止事件冒泡和刷新页面 六.综合案例-todolist 一.过滤器 定义:就是vue允许开 ...

  6. CTF_show平台 web题解 part2

    web10 WITH ROLLUP 绕过 点击取消键弹出源码下载: 源码如下: <?php $flag=""; function replaceSpecialChar($st ...

  7. 使用wsl2時碰到的問題

    1.啓動wsl系统时出现“参考的对象类型不支持尝试的操作”. 解决方法: netsh winsock reset

  8. VirtualBox安装centos8

    原文链接:https://www.wjcms.net/archives/vagrantbox安装centos8 VirtualBox安装centos8 在线安装(不推荐) 打开git软件,直接运行命令 ...

  9. Python之迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  10. bzoj4716假摔

    bzoj4716假摔 题意: 给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵.n,m≤1000,k≤250000. 题解: 首先求出长为xmin,宽为ymi ...