C语言与C++中关于字符串使用的比较

 更新时间:2022年05月26日 09:31:51   作者:char~lie  
字符串是我们再熟悉不过的东西了,任何语言中字符串都是基础都要经常用到,那么在不同语言中字符串的用法一样吗?下面我们来看看C语言与C++中字符串使用的比较

相似处

  C++作为C的进阶版,可以调用C的库函数。C++标准库包括了C标准库,C++头文件cctype其实就利用了C的ctype.h中的库函数。在C++中使用C的头文件都会在前面加c,比如C的name.h在C++就是cname。

  为了与C兼容,C++有字符串字面值,也就是类似"hello world"这种,但是这和string类型不一样,视编译器而定string最后不一定有’\0’。

字符串字面值

  字符串字面值是一串常量字符,采用双引号括起来的零个或者多个字符表示,不可打印字符表示成相对应的转义字符:

"Hello World"       //simple string literal
""                  //empty string literal
"\nCC\toptions\t"   //string literal using newlines and tabs 

  为了兼容C语言,C++所有字符串字面值都由编译器自动在末尾添加一个空字符,和C语言一样:

'A'                 //single quote: character literal
"A"                 //double quote: character string literal

  表示包含字母A和空字符两个字符的字符串。

  表示包含字母A和空字符两个字符的字符串。

  也存在宽字符和宽字符串字面值,如:

L'a'
L"a wide string literal"

  宽字符串字面值是一串常量宽字符串,同样以宽空字符结束。

  两个相邻的仅由空格、制表符或换行符分开的字符串字面值(宽字符串字面值),可连接成一个新字符串字面值,使得多行书写长字符串字面值变得简单。

std::cout << "a multi-line"
             "string literal"
             "using concatenation"
          << std::endl;

  执行这条语句将会输出:

a multi-line string literal using concatenation

  但如果连接字符串字面值和宽字符串字面值,将会出错:

std::cout << "a multi-line"
             L"string literal"
             "using concatenation"
          << std::endl;

  其结果将是未定义的(undefined)。

  C++结构比较自由,甚至可以在单词中断行:

std::cou\
t << "Hi" << st\
d::endl;

  等价于:

std::cout << "Hi" << std::endl;

  可以用这个特性编写长字符串字面值:

std::cout << "a multi-line \
string literal \
using a backslash"
           <<std::endl;
           return 0;

  使用反斜线符号时这个符号必须是该行的尾字符,不允许后面有任何注释或者空格。

C++标准库string类型

string类型初始化

string s1;   //默认构造函数,s1为空串
string s2(s1);   //将s2初始化为s1的副本
string s3("value");   //将s3初始化为字符串字面值副本
string s4(n,'c');     //将s4初始化为字符'c'的n个副本

String对象的读写  

一个有用的string IO操作是getline,getline函数从输入流的下一行开始读取,保存读取的内容到string中,但不包括换行符,只要遇到换行符,哪怕是该行第一个字符,getline也将停止读入并返回。   

由于getline返回时丢弃换行符,换行符将不会存储在string对象中。下面给出一个使用getline读取字符串的例子:

int main()
{
	string line;
	while(getline(cin,line))
		cout << line << endl;
	return 0;
}

String对象的操作

s.empty()           //s为空串返回true,否则返回false
s.size()            //返回s中字符个数
s[n]                //返回s中位置为n的字符,位置从0开始计数
s1+s2               //将s1和s2连接成一个新字符串
s1=s2               //将s1替换成s2副本
v1==v2              //比较v1和v2,相等返回true,否则返回false
!=,<,<=,>,>=    //字符串比较

从逻辑上讲,size函数应该返回整型,然而事实上返回的是string::size_type类型,为避免溢出,在代码编写时最好用string::size_type。

关系操作符的比较规则和C的strcmp一样不赘述。

和字符串字面值的连接  

上述s1+s2连接的是字符串,字符串也是可以和字符串字面值连接的。   

由于编译器不同,string类型变量结尾的’\0’时有时无,但是有一点毫无疑问,两个字符串字面值是不能连接的。

string s1="hello";
string s2="world";
string s3=s1+"hi";             //没问题,字符串连接字符串字面值
string s4="hello"+"world";     //出错,+操作符不接受两个const char[]变量
string s5=s1+"hello"+"world"   //没问题,每个+操作符都有string作为操作数

到此这篇关于C语言与C++中关于字符串使用的比较的文章就介绍到这了,更多相关C语言字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c语言/c++溢出问题浅谈

    c语言/c++溢出问题浅谈

    这篇文章主要给大家介绍了关于c语言/c++溢出问题的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • C++编程使用findfirst和findnext查找及遍历文件实现示例

    C++编程使用findfirst和findnext查找及遍历文件实现示例

    这篇文章主要为大家介绍了C++编程如何使用findfirst和findnext查找及遍历文件实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • C++实现关系与关系矩阵的代码详解

    C++实现关系与关系矩阵的代码详解

    这篇文章主要介绍了C++实现关系与关系矩阵,功能实现包括关系的矩阵表示,关系的性质判断及关系的合成,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C语言实现单链表的快速排序算法

    C语言实现单链表的快速排序算法

    大家好,本篇文章主要讲的是C语言实现单链表的快速排序算法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++中隐式类型转换学习笔记

    C++中隐式类型转换学习笔记

    在本篇文章里小编给大家整理的是一篇关于C++中隐式类型转换学习笔记内容,有兴趣的跟着小编来学习下吧。
    2020-02-02
  • C语言学生信息管理系统小项目

    C语言学生信息管理系统小项目

    这篇文章主要为大家详细介绍了C语言学生信息管理系统小项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 深入解析C++中的函数模板和函数的默认参数

    深入解析C++中的函数模板和函数的默认参数

    这篇文章主要介绍了深入解析C++中的函数模板和函数的默认参数,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • c语言数据结构之栈和队列详解(Stack&Queue)

    c语言数据结构之栈和队列详解(Stack&Queue)

    这篇文章主要介绍了c语言数据结构之栈和队列详解(Stack&Queue),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Windows上CLion的配置步骤详解

    Windows上CLion的配置步骤详解

    这篇文章主要介绍了Windows上CLion的配置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • VisualStudio2022打包项目文件为.exe安装包

    VisualStudio2022打包项目文件为.exe安装包

    本文主要介绍了VisualStudio2022打包项目文件为.exe安装包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论