C/C++风格字符串

本文详细介绍了C语言风格的字符串及其操作函数,如strlen、strcmp和strcpy,并对比了C++标准库中string类的使用方法,包括字符串的创建、复制、连接、长度获取及字符访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一:字符串类型分类:

1.       C风格字符串:起源于C,并在C++中得到支持。

a.       存储方式:被存储在一个字符数组中,通过一个char*类型的指针来操纵它。

b.       提供的库函数:包含头文件:#include<cstring>

a)         int strlen( const char* );//返回字符串的长度

b)        int strcmp( const char*, const char* );//比较两个字符串是否相等

c)        char* strcpy( char*, const char* );//把第二个字符串拷贝到第一个字符串中

#include <iostream>

#include <cstring>

#include <stdio.h>

using namespace std;

void main()

{

    char* arraya = "hello world!";

    int c;

    c = strlen(arraya);

    cout<<c<<endl;

    char arrayb[80];

    char * test = NULL;

    test = strcpy (arrayb, arraya);

    cout<<"test is: "<<test<<endl;

    cout<<arrayb<<endl;

    int d;

    d = strcmp(arrayb,arraya);

    cout<<endl<<"d->"<<d<<endl;

}这段代码包含了以上三个库函数的使用。

二:c++风格的string

1.       我们使用string,它的库函数有很多,当我们需要获得某个字符串的长度的时候,可以调用size()函数:

这里我们定义一个string:string sa = “hello world!”;

1)  我们调用size()函数:sa.size();它的值就是12;

2)  我们需要判断一个字符串是否为空的时候,我们可以调用empty()函数来判断:sa.empty();若这个字符串为空,那么它将返回1,若不为空,则返回0。

3)  我们会用到拷贝字符串的情况,在我们初始化一个字符串的时候,我们可以初始化成一个字符串的拷贝:string sc(sa);在这段代码后,sc的内容和sa就完全相同了。我们可以使用一个判断语句来判断这两个字符串是否相等:if( sc == sa)…

    这里还有一种方法,用于字符串的赋值和拷贝:sc = sa;在这个语句后使用if判断语句判断得两个字符串依旧相等。

4)  我们需要两个字符串连接的时候,我们可以使用一种相较于C风格字符串简单的方法,我们定于:
string sa = “I’m ”;
s tring sb = “a ”;
string sc = “boy!/n”;
如果我们希望得到一个字符串是:I’m a boy!换行…我们可以尝试用:

String sd = sa + sb + sc;最后sd的结果就是:I’m a boy!

5)  在我们遇到需要把一个C字符串赋值给一个C++字符串的时候,我们可以使用赋值语句直接赋值,这样的代码:

char * cs_a = "hello my friend!";
string sh;

sh = cs_a;
在这段代码中,输出sh,将输出hello my friend!我们可以再次使用判断语句判断这两个字符串是否相等,if(cs_a == sh)cout<<”the two string equal!”;

最后的输出时相等的,在这个语句中我们收获到两个信息,第一,这样的判断语句可以判断一个C字符串和C++字符串是否相等;第二,我们明白了这样把C串赋值给C++串是完全可行的。

6) 当我们需要把一个C++字符串转换成为C字符串时,是不能自动转换的。如果我们写下以下代码:
string si = "good morning!";
char * cs_b = si;这会有编译错误,而错误提示为:

“初始化”: 无法从“std::string”转换为“char *”

这时候就需要调用一个库函数:c_str();这个函数为了防止字符数组被程序直接处理,c_str的返回值是一个指向常量数组的指针,这个函数的使用将是:
const char * cs_b = si.c_str();

然后我们可以再用if判断一下两个字符串是否相等,经过判断,完全相等。

7) C++字符串同样支持下表访问某一个字符,比如:

for(int i = 0; i < si.size(); i++ )

       cout<<" "<<si[i];这段代码的输出将是: g o o d  m o r n i n g !

    这里也可以利用迭代器iterator的知识,并使用replace()来替换某一些字符:

    replace(si.begin(), si.end(), 'o', 'a');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值