C++字符串

C风格字符串

尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。这是因为C风格字符串不仅使用起来不方便,而且极其容易引发程序漏洞,是诸多安全问题的根本原因。C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。

|函数 | 说明 |
| strlen() |返回p的长度,空字符不计算在内|
| strcmp(p1,p2) | 比较p1和p2的相等性。如果p1==p2,返回0;如果p1>p2,返回一个正值,否则返回负值 |
| strcat(p1,p2) | 将p2附加到p1之后,返回p1|
| strcpy(p1,p2) | 将p2拷贝给p1,返回p1 |

注意:

(1)表中的4个函数都不负责验证其字符串参数;
(2)传入此类函数的指针,必须是指向以空字符作为结束的数组。
char ca[] = {‘C’, ‘+’, ‘+’}; // 不以空字符结尾的数组
cout << strlen(ca) << endl; // 错误,因为strlen遇到空字符才停下来,所以strlen函数将有可能沿着ca在内存中的位置不断向前寻找。
(3)用字符串给字符数组赋值时由于要添加结束符’\0’,数组的长度要比字符串的长度大1.
(4)puts和printf在输出字符串时会逐个扫描字符,直到遇见’\0’才结束。
(5)C语言中字符串定义方式有两种:char *s或者char s[],都属于C风格字符串,其区别是char *s定义的字符串直接量保存在内存的数据段中且不可更改,字符数组保存在栈内存中

    //例:以下程序会报错,因为Danny保存在内存数据段中,不可更改。
    char *src = "Danny";
    const char *addition = "Andy";
    strcat(src, addition);
    //正确形式
    char src[20] = "Danny";
    const char *addition = "Andy";
    strcat(src, addition);

C风格字符串和string的相关操作

一、C风格字符串与string字符串直接的转换

    //C风格字符串转string:直接赋值
    char *ch1="123456";
    string str=ch1;//直接赋值即可
    cout<<str<<endl;
    char ch[]="ldkk";
    string st=ch;//直接赋值
 
 
    //string转C风格字符串:两种方式c_str() data()
    string str2="gsghd";
    const char *s=str2.c_str();//.c_str()返回字符串常量
    printf("%s\n",s);
 
    const char *cs=str2.data();
    printf("%s\n",cs);

string的常用函数

一、string的构造函数形式

string str:生成空字符串

string s(str):生成字符串为str的复制品

string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值

string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值

string s(num ,c):生成num个c字符的字符串

string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值

eg:


    string str1;               //生成空字符串
    string str2("123456789");  //生成"1234456789"的复制品
    string str3("12345", 0, 3);//结果为"123"
    string str4("012345", 5);  //结果为"01234"
    string str5(5, '1');       //结果为"11111"
    string str6(str2, 2);      //结果为"3456789"

#include <iostream>
#include <string>
using namespace std;

void test1()
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值