C 风格字符串与C++中string类区别
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类区别相关推荐
- Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释
Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...
- 深入理解C++中string类(详解)
深入理解C++中string类 背景介绍:在C++中使用string.h和cstring并不是所要介绍的string类指的是C语言库中字符串,而本文所要介绍的是string类.要使用string类主要 ...
- 标准C++中string类用法总结
2019独角兽企业重金招聘Python工程师标准>>> 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好 ...
- 【持续更新】C++中string类使用总结
C++中string类的功能以及使用方法可类比于C语言中的字符数组,但是相互比较之下可谓是是有过之而无不及,实在是太方便,故留此贴总结日常学习所得经验. 智障blog,排版这么难???? 1. 创建字 ...
- Java中String类的方法及说明
String : 字符串类型 一.构造函数 String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数 ...
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- c++ 输出string_来讲讲Java中String 类的知识点
本文来总结一下Stirng 的有关知识点 1.String中的引用 String 可以通过new和构造方法来创建一个对象,用s来引用它(也就是相当于把asdf这个字符串赋值给s String s = ...
- 【转载】Java中String类的方法及说明
转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数 String ...
- 【JAVA中String类的相关知识】
文章目录 一.创建字符串 1.1创建字符串时的内存布局 二.字符串比较相等 2.1equals方法 三.字符串常量池 3.1实例化操作的内存布局 3.2intern手动入池 四.理解字符串不可变 4. ...
最新文章
- 西门子断开延时定时器_在PLC编程中定时器的一些针对现场不同情况的一些妙用...
- 在cell中取得UITableView所在的ViewController对象
- 算法---------数组-----------寻找峰值
- python爬虫流程-什么是爬虫?爬虫的基本流程是什么?
- 如何扩展CentOS7的SWAP分区
- 计算机一级b考试理论知识,计算机一级b-一级计算机等级考试中的“一级B”指什么?谢谢! 爱问知识人...
- python--pandas 分位数
- 晶振,数字电路的心脏~
- 《Python Cookbook 3rd》笔记(3.10):矩阵与线性代数运算
- ios网络学习------1get post异步请求
- 富勒wms系统里的定时器id_为什么物流行业非常推崇仓库管理系统?
- 通过在群晖上安装虚拟机,实现群晖与115网盘的双向同步
- 基于PLC的锅炉控制,基于s7-200的锅炉压力控制的设计,基于西门子S7-200plc与MCGS锅炉压力PID控制系统设计
- Java学习笔记 第一天
- 计算机专业毕业后大致的工作方向
- G-sensor的两种使用方式
- HA高可用与负载均衡入门到实战(四)---- 配置nginx防盗链和HTTPS
- 80后男人的脱单技巧
- flash游戏代码html5,Flash贪吃蛇游戏AS代码翻译
- Qt程序移植到ARM
热门文章
- boost::mp11::mp_count_if_q相关用法的测试程序
- C语言用‘%20‘替换字符串中的所有空格的算法(附完整源码)
- OpenGL Lighting models照明模型的实例
- C++horspool算法查找字符串是否包含子字符串(附完整源码)
- C++Tower of Hanoi汉诺塔的实现算法(附完整源码)
- 有指针为何还要STL迭代器
- QT的QSGGeometryNode类的使用
- QT的QJSEngine类的使用
- STL常用的排序算法
- c++STL容器的priority_queue