1. 概述

字符串是若干个有效字符(字母、数字、专用字符、转义字符等)的序列。C语言中没有字符串变量,字符串不是存放在一个变量中,而是存放在一个字符型数组中。因此,为了存放字符串,常常在程序中定义字符型数组。

C++中,string 类是 STL 中 basic_string 模板实例化得到的模板类,方便对字符串进行操作。

2. 区别

 

C字符串

string对象(C++)

所需的头文件名称

<string>或<string.h>

<string>或<string.h>

需要头文件 原因

为了使用字符串函数

为了使用string类

声明 方式

char name[20];

string name;

初始化方式

char name[20]="nihao";

string name = "nihao";

必须声明字符串长度么?

使用一个null字符么?

字符串赋值 的实现方式

strcpy(name,"John");

name = "John";

优点

更快

更易于使用,优选方案

可以赋一个比现有字符更长的字符串么?

不能

可以

3. 常用的字符串函数

strcpy(s1, s2):复制字符串 s2 到字符串 s1。
strcat(s1, s2):连接字符串 s2 到字符串 s1 的末尾。
strlen(s1);返回字符串 s1 的长度。
strcmp(s1, s2):如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
strchr(s1, ch):返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2):返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
#include <QCoreApplication>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);char str1[11] = "Hello";char str2[11] = "World";char str3[11];char ch='o';char str4[] = "orl";int  len ;//! 复制 str1 到 str3strcpy( str3, str1);qDebug("strcpy( str3, str1) : %s",str3);//! 连接 str1 和 str2strcat( str1, str2);qDebug("strcat( str1, str2): %s",str1);//! 连接后,str1 的总长度len = strlen(str1);qDebug("strlen(str1) : %d",len);//! 查找字符chchar *pos = strchr(str1,ch);qDebug("strchr :%d",pos-str1);//! 查找字符串pos = strstr(str2,str4);qDebug("strchr :%d",pos-str2);//! 字符串比较int ret = strcmp(str1,str2);qDebug("strcmp :%d",ret);return a.exec();
}
输出:
strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10
strchr :4
strchr :1
strcmp :-1

4. 相互转换

4.1 字符数组转化成string类型

#include <QCoreApplication>
#include <string>
#include <iostream>using namespace  std;
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);char ch[] = "hello world";string str(ch);qDebug("%s",str.c_str());string str1;str1 = ch;qDebug("%s",str1.c_str());return a.exec();
}
结果输出:
hello world
hello world

4.2 将string类型转换为字符数组

#include <QCoreApplication>
#include <string>
#include <iostream>using namespace  std;
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);/*char ch[] = "hello world";string str(ch);qDebug("%s",str.c_str());string str1;str1 = ch;qDebug("%s",str1.c_str());*/string str("hello world");char buf[100];strcpy(buf,str.c_str());qDebug("%s-%d",buf,strlen(buf));return a.exec();
}
结果输出
hello world-11

参考资料:

https://blog.csdn.net/yf210yf/article/details/8777131

C 风格字符串与C++中string类区别相关推荐

  1. Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

    Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...

  2. 深入理解C++中string类(详解)

    深入理解C++中string类 背景介绍:在C++中使用string.h和cstring并不是所要介绍的string类指的是C语言库中字符串,而本文所要介绍的是string类.要使用string类主要 ...

  3. 标准C++中string类用法总结

    2019独角兽企业重金招聘Python工程师标准>>> 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好 ...

  4. 【持续更新】C++中string类使用总结

    C++中string类的功能以及使用方法可类比于C语言中的字符数组,但是相互比较之下可谓是是有过之而无不及,实在是太方便,故留此贴总结日常学习所得经验. 智障blog,排版这么难???? 1. 创建字 ...

  5. Java中String类的方法及说明

    String : 字符串类型 一.构造函数      String(byte[ ] bytes):通过byte数组构造字符串对象.      String(char[ ] value):通过char数 ...

  6. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  7. c++ 输出string_来讲讲Java中String 类的知识点

    本文来总结一下Stirng 的有关知识点 1.String中的引用 String 可以通过new和构造方法来创建一个对象,用s来引用它(也就是相当于把asdf这个字符串赋值给s String s = ...

  8. 【转载】Java中String类的方法及说明

    转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数      String ...

  9. 【JAVA中String类的相关知识】

    文章目录 一.创建字符串 1.1创建字符串时的内存布局 二.字符串比较相等 2.1equals方法 三.字符串常量池 3.1实例化操作的内存布局 3.2intern手动入池 四.理解字符串不可变 4. ...

最新文章

  1. 西门子断开延时定时器_在PLC编程中定时器的一些针对现场不同情况的一些妙用...
  2. 在cell中取得UITableView所在的ViewController对象
  3. 算法---------数组-----------寻找峰值
  4. python爬虫流程-什么是爬虫?爬虫的基本流程是什么?
  5. 如何扩展CentOS7的SWAP分区
  6. 计算机一级b考试理论知识,计算机一级b-一级计算机等级考试中的“一级B”指什么?谢谢! 爱问知识人...
  7. python--pandas 分位数
  8. 晶振,数字电路的心脏~
  9. 《Python Cookbook 3rd》笔记(3.10):矩阵与线性代数运算
  10. ios网络学习------1get post异步请求
  11. 富勒wms系统里的定时器id_为什么物流行业非常推崇仓库管理系统?
  12. 通过在群晖上安装虚拟机,实现群晖与115网盘的双向同步
  13. 基于PLC的锅炉控制,基于s7-200的锅炉压力控制的设计,基于西门子S7-200plc与MCGS锅炉压力PID控制系统设计
  14. Java学习笔记 第一天
  15. 计算机专业毕业后大致的工作方向
  16. G-sensor的两种使用方式
  17. HA高可用与负载均衡入门到实战(四)---- 配置nginx防盗链和HTTPS
  18. 80后男人的脱单技巧
  19. flash游戏代码html5,Flash贪吃蛇游戏AS代码翻译
  20. Qt程序移植到ARM

热门文章

  1. boost::mp11::mp_count_if_q相关用法的测试程序
  2. C语言用‘%20‘替换字符串中的所有空格的算法(附完整源码)
  3. OpenGL Lighting models照明模型的实例
  4. C++horspool算法查找字符串是否包含子字符串(附完整源码)
  5. C++Tower of Hanoi汉诺塔的实现算法(附完整源码)
  6. 有指针为何还要STL迭代器
  7. QT的QSGGeometryNode类的使用
  8. QT的QJSEngine类的使用
  9. STL常用的排序算法
  10. c++STL容器的priority_queue