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

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

目录

相似处

字符串字面值

C++标准库string类型

相似处

  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语言字符串内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    字符库快捷键|字符串快捷键

    字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行注释是 #Mac的快捷键是 command+/windows的快捷键是 Ctrl + /2、多行注

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

    c4d语言设置|c4d汉语设置

    c4d语言设置|c4d汉语设置,,1. c4d汉语设置mac版的C4D是这样的,中文字体是有的,但是是以拼音的形式存在,比如黑体就是ht。中文字体以拼音方式

    电脑宣传语|电脑宣传语言

    电脑宣传语|电脑宣传语言,,1. 电脑宣传语言1.我做好了与你过一辈子的打算,也做好了你随时要走的准备,2.每段青春都会苍老,但我希望记忆里的你

    office语言设置|微软office语言设置

    office语言设置|微软office语言设置,,微软office语言设置一、首先点击桌面左下角“WIN键”。二、弹出选项内点击“所有程序”。三、接着点

    小米设置日语|小米设置日语语言

    小米设置日语|小米设置日语语言,,1. 小米设置日语语言MIUI系统文字目前只支持简体中文、繁体中文、英文、藏文和维吾尔文,不支持日文 2. 小

    易语言开发电脑系统|易语言电脑版

    易语言开发电脑系统|易语言电脑版,,1. 易语言电脑版首先编译——是将程序编译为exe文件,只能在有易语言的机子上运行,独立编译——是将程序