1、使用前应先包含头文件string.h,有的是cstring

#include<string>

这样才能正确的cin和cout字符串。

cin时,是按照空格、TAB和换行进行分割的

例如,输入Hello World

使用cin输入,监视输入的对象,可以看到,是分Hello 和World两次cin的,因此可以用while(cin>>str)来达到对一句话中每个单词(小字符串)的访问。

    while (cin >> s) {
if (s[s.size() - 1] == '.')
cout << s.size() - 1 << endl;
else
cout << s.size() << " "; }

上述代码是用来统计每个单词中的字母个数。

2、字符串分割,转整数

字符串分割函数:strtok()

返回值必须是 char []或者char*,如果是string类型想用该函数分割,必须先将string转化为char*

void test10()
{
char str[] = "I,am,a,student; hello world!"; const char *split = ",; !";
char *p2 = strtok(str,split); //str中的split字符均被替换为\0,同时提取出第一个子串
while(p2) //通过while循环可以分别将余下的字符串提取出来
{
cout<<p2<<endl;
p2 = strtok(NULL,split);//将第一个参数置为NULL可以提取出剩下的
}
}

3、string转char*

https://blog.csdn.net/cpongo3/article/details/93854004

char * 可以转string,直接赋值即可。不能单独赋int和c字符类型值。
string s1("demo1");
string s1 = "demo";
char *p = "demo";
s1 = p;

string转char*有三种方式:c_str(),data(),copy()
c_str()返回一个c风格的字符数组,带有'\0'结束
data()返回一个数组,不自动增加‘\0’
copy()拷贝一块字符到新的内存,需要新分配一块内存用于存放。
前两个函数,原有内容发生变化,地址指的内容也会变化,使用copy不会发生这种问题。(见例子3)

const char *p = s.data();
const char * p = s.c_str();

如果不加const,要这样写

char *p = char *(s.data());
char * p = char*(s.c_str());

char *p = new char[s.length() + 1];
s.copy(p, string::npos);
p[s.length()] = 0;//字符串以'/0'结尾
delete p;

例子3:
std::string s1 = "demo 123456\n \0";
const char *p1 = s1.c_str();
const char *p2 = s1.data();
s1 = "345";

s1 内容发生变化后,p1和p2指针内容的地址也发生变化。

4、char *A与char A[]

char *A="ABC";如果没有用new建立动态数组时,使用char *A=这种形式给A赋值后,不允许对A进行修改

char A[]="ABC"; 用字符数组则可以允许修改

5、cin一个字符串后,会自动在最后加一个'\0'。这体现在统计字符串长度时,用strlen(ch)统计字符串长度就是以'\0'为分界同时不包含'\0'的长度。

6、数字字符转整数

//假设ch为数字字符'0'到'9',将其变为对应的整数
cout<<int(ch-'0')

7、在没有明确说明不能用字符串库时,用string代替char*,char[]效果更好。

string s等价于 char *s=new char[n];

之后也不用特意delete

8、string 也可以用下标提取字符串中的特定字符,如string[1]

通过string s;

s.length()得到字符串长度;

参考:https://blog.csdn.net/qq_37941471/article/details/82107077

https://www.cnblogs.com/springsnow/p/9428657.html#_label0_12

C++ 字符串 string的更多相关文章

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

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

  2. C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)

    在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...

  3. Java常量字符串String理解

    Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "eq ...

  4. 字符串string类型转换成DateTime或DateTime?类型

    常用的Convert.ToDateTime方法 //将含有正确日期格式的string类型转换成DateTime类型 string strDate = "2014-08-01"; D ...

  5. Javascript基础系列之(三)数据类型 (字符串 String)

    javascript一共有9种数据类型 字符串 String 数值型 Number 布尔型 Boolean 未定义 Undefine 空值 Null 对象 Object 引用Refernce 列表型 ...

  6. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

  7. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

  8. 字符串String类

    1. String类是一个密封类.用关键字sealed修饰: 2. 字符串的两个特性:     ·不可变性:string类型变量,一旦声明就表明它是不会被改变的.因此,string中的方法对strin ...

  9. 字符串string和内存流MemoryStream及比特数组byte[]互转

    原文:字符串string和内存流MemoryStream及比特数组byte[]互转   字符串string和内存流MemoryStream及比特数组byte[]互转比较 定义string变量为str, ...

  10. 【stanford C++】字符串(String)与流(Stream)

    字符串(String)与流(Stream) 一.C++中字符串(String) 字符串(String):就是(可能是空的)字符序列. C++中的字符串在概念上和Java中的字符串类似. C++字符串用 ...

随机推荐

  1. 使用Termux并与ubuntu建立ssh连接

    什么是Termux? Termux是一个Android终端仿真器和Linux环境应用程序,直接工作,无需根目录或设置.一个最小的基本系统被自动安装-额外的软件包可以使用APT软件包管理器来使用.不需要 ...

  2. 洛谷P1002过河卒java100分题解

    题目描述如图: 这道题我以前以回溯的方法做,只能拿到60分 现在才发现是道动态规划题 解题思路: 创建一个(0,0)到终点打小的二维数组表示棋盘 每个坐标的值为此位置到终点的路数 最下方一排和最右方一 ...

  3. Nodejs path对象

    很快Node就会迎来4.0的时代,届时将并入现有的iojs,所以先前写过的iojs入门系列直接更名为NodeJS入门. 本篇开始将逐个介绍Node的各主要模块,依循API文档走一遍,但会给出比API文 ...

  4. Java使用DOM方式读写XML

    一.DOM读取 import ***; public class ReadXML { public static void main(String[] args) { try { //DOM Docu ...

  5. sublime运行错误

      这是由于没有保存文档导致   说明: [Finished in 19.4s with exit code 1]-表示执行时间 [shell_cmd: python3 -u "/Volum ...

  6. Spring Boot 2.x基础教程:使用tinylog记录日志

    tinylog简介 tinylog,与其他各种tiny开头的东西一样,是一个轻量级的开源日志解决方案.它本身只包含两个JAR文件(一个用于API,另一个用于实现),没有任何外部依赖关系.两个JAR文件 ...

  7. Solution -「AGC 016F」Games on DAG

    \(\mathcal{Description}\)   Link.   给定一个含 \(n\) 个点 \(m\) 条边的 DAG,有两枚初始在 1 号点和 2 号点的棋子.两人博弈,轮流移动其中一枚棋 ...

  8. 对象到底是怎么new出来的

    前言:要想理解本文,必须先了解JVM的内存结构 一.创建对象的方式 new:最常见 反射:Class.newInstance() 使用clone() 反序列化 二.创建对象的步骤(对象在JVM中怎么存 ...

  9. 部署 Docker Registry 并配置认证登录

    文章目录 搭建 Docker Registry 创建本地映射目录 启动 Docker Registry 配置 Docker Registry 配置 Docker Registry 认证 启动带认证的 ...

  10. verification 时间不推进,挂起

    时间不推进,挂起 0时刻 windows-> new -> source Browser 可能是仿真精度不够,比如进度是1ns,但是时钟有0.1ns为周期的,这种情况下,仿真器会吧这个周期 ...