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

(0)

相关推荐

  • C++超详细讲解字符串类

    目录 一.历史遗留问题 二.解决方案 三.标准库中的字符串类 四.字符串循环右移 五.小结 一.历史遗留问题 C 语言不支持真正意义上的字符串 C 语言用字符数组和一组函数实现字符串操作 C 语言不支持自定义类型,因此无法获得字符串类型 二.解决方案 从 C 到 C++ 的进化过程引入了自定义类型 在 C++ 中可以通过类完成字符串类型的定义 三.标准库中的字符串类 C++ 语言直接支持 C 语言的所有概念 C++ 语言中没有原生的字符串类型 C++ 标准库提供了 string 类型 strin

  • C++中string字符串分割函数split()的4种实现方法

    目录 一.使用stringstream流 二.使用string类提供的find方法与substr方法 三.使用C库函数strtok 四.使用regex_token_iterator(正则表达式) 总结 如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = "This+is+a+test"; 我们如何将以上字符串按照某种分隔符( ,-,+),

  • 在C++中把字符串转换为整数的两种简单方法

    目录 C++中的数据类型 如何在C++中声明和初始化 int s 如何在C++中声明和初始化 string s 如何使用 stoi() 函数将字符串转换为int 如何使用stringstream 类将一个字符串转换为一个int 总结 当你用C++编码时,经常会有这样的时候,你会想把一种数据类型转换为另一种. 在这篇文章中,你将看到两种最流行的方法来学习如何在C++中把字符串转换为整数. 让我们开始吧! C++中的数据类型 C++编程语言有一些内置的数据类型. int,用于整数(整数)(例如10,

  • C++实现字符串切割的两种方法

    目录 字符串切割的两种方法 1.通过stl实现 2.通过使用strtok()函数实现 字符串分割&类型转换(string->double) 字符串切割的两种方法 字符串切割的使用频率还是挺高的,string本身没有提供切割的方法,但可以使用stl提供的封装进行实现或者通过c函数strtok()函数实现. 1.通过stl实现 涉及到string类的两个函数find和substr: 1.find函数 原型:size_t find ( const string& str, size_t p

  • 基于C++实现去除字符串头尾指定字符功能

    目录 一.从头部开始去除指定字符 二.去除尾部指定的字符 三.测试比较 编程时我们经常需要对字符串进行操作,其中有一项操作就是去除字符串的头(尾)指定的字符,比如空格.通常我们会使用封装好的库函数或者类函数的Trim方法来实现,如果自己动手写一个TrimHead和TrimTail函数该如何实现呢? 本文针对字符串头(尾)部指定的字符的去除,分别给出两个实现方法.并分别比较一下改进后的性能如何? 一.从头部开始去除指定字符 首先从头遍历,直到遇见第一个非指定字符,此后将后续字符按顺序逐一前移. /

  • 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’. 字符串字面值   字符串字面值是一串

  • C语言中计算字符串长度与分割字符串的方法

    C语言strlen()函数:返回字符串的长度 头文件: #include <string.h> strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); [参数说明]s为指定的字符串. strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0". [返回值]返回字符串s 的字符数. 注意一下字符数组,例如 char str[100] = "http://see.xidian.edu.cn/cpp

  • 详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include <stdio.h> #include <string.h> //该程序的功能是 输入阿拉伯数字的月份数 输出英文月份 int main() { //一个字符串数组 它的下标代表英文月份的阿拉伯数字 char *month[] = {"January","Februa

  • C语言中求字符串长度的函数的几种实现方法

    1.最常用的方法是创建一个计数器,判断是否遇到'\0',不是'\0'指针就往后加一. int my_strlen(const char *str) { assert(str != NULL); int count = 0; while (*str != '\0') { count++; str++; } return count; } 2.不创建计数器,从前向后遍历一遍,没有遇到'\0'就让指针向后加一,找到最后一个字符,记下来地址,然后用最后一个字符的地址减去起始地址,就得到了字符串的长度.

  • Go语言中的字符串处理方法示例详解

    1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号("")或反引号(``)定义. 双引号:"", 用于单行字符串. 反引号:``,用于定义多行字符串,内部会原样解析. 示例: // 单行 "心有猛虎,细嗅蔷薇" // 多行 ` 大风歌 大风起兮云飞扬. 威加海内兮归故乡. 安得猛士兮守四方! ` 字符串支持转义

  • Go语言中的字符串拼接方法详情

    目录 1.string类型 2.strings包 2.1 strings.Builder类型 2.2 strings.Reader类型 3.bytes.Buffer 3.1 bytes.Buffer:写数据 3.2 bytes.Buffer:读数据 4.字符串拼接 4.1 直接相加 4.2strings.Builder 4.3 strings.Join() 4.4 bytes.Buffer 4.5 append方法 4.6 fmt.Sprintf 5.字符串拼接性能测试 1.string类型 s

  • 温故知新——JavaScript中的字符串连接问题最全总结(推荐)

    ECMAScript 中最常见的一个问题是字符串连接的性能.与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变.请考虑下面的代码: var str = "hello "; str += "world"; 实际上,这段代码在幕后执行的步骤如下: 1.创建存储 "hello " 的字符串. 2.创建存储 "world" 的字符串. 3.创建存储连接结果的字符串. 4.把 str 的当前内容复制到结果中.

  • BAT批处理中的字符串处理详解(字符串截取)

    下面对这些功能一一进行讲解. 1.截取字符串 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符.举例说明其基本功能: 复制代码 代码如下: @echo off set ifo=abcdefghijklmnopqrstuvwxyz0123456789 echo 原字符串(第二行为各字符的序号): echo %ifo% echo 123456789012345678901234567890123456 echo 截取前5个字符: echo %if

  • 深入理解Java中的字符串类型

    1.Java内置对字符串的支持: 所谓的内置支持,即不用像C语言通过char指针实现字符串类型,并且Java的字符串编码是符合Unicode编码标准,这也意味着不用像C++那样通过使用string和wstring类实现与C语言兼容和Unicode标准.Java内部通过String类实现对字符串类型的支持.这意味着:我们可以直接对字符串常量调用和String对象同样的方法: //可以再"abc"上直接调用String对象的所有方法 int length="abc".l

  • Python中的字符串类型基本知识学习教程

    如果对自然语言分类,有很多中分法,比如英语.法语.汉语等,这种分法是最常见的.在语言学里面,也有对语言的分类方法,比如什么什么语系之类的.我这里提出一种分法,这种分法尚未得到广大人民群众和研究者的广泛认同,但是,我相信那句"真理是掌握在少数人的手里",至少在这里可以用来给自己壮壮胆. 我的分法:一种是语言中的两个元素(比如两个字)拼接在一起,出来一个新的元素(比如新的字):另外一种是两个元素拼接在一起,只是得到这两个元素的并列显示.比如"好"和"人&quo

随机推荐