C风格字符串与string

C风格字符串

  1. C风格字符串并不是一种类型,它指的是一种编程习惯,指C语言中以'\0'结尾的字符串
  2. C语言中没有字符串类型,通常用字符串数组来存放一个字符串;可以直接将一个字符串直接量(字面量)直接赋值给数组(可以定义长度也可以不指定),编译器会在字符数组末尾自动的添加'\0'作为串的结束符。
  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风格字符串以'\0’结尾,头文件cstring和string.h中定义的函数strlen、strcat等函数操作的对象是C风格字符串。

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);
  • C风格字符以及string字符串输入输出以及遍历方式

    //c字符数组输入方式:
    char ch[100];
    //scanf("%s",ch);//c字符串输入方式
    //printf("%s\n",ch);

    char *ch2;
    //scanf("%s",ch2);报错,ch2未被初始化指向不明
    //ch2=(char *)malloc(sizeof(char));
    //scanf("%s",ch2);//已经分配好空间

    gets(ch);
    printf("%s\n",ch);


    //数组遍历:需要获取长度,使用函数strlen
    int len=strlen(ch);
    for(int i=0;i<len;i++){
        printf("%c\n",ch[i]);
    }
  • C风格字符串与string的循环连拼接方式(包括与数字直接的拼接)

//字符串拼接

    //c风格字符串拼接strcat
    char ch[100]="";

    for(int i=0;i<10;i++){
        strcat(ch,"1");
    }
    printf("%s\n",ch);

    //使用sprintf
    char s[100];
    for(int i=0;i<2;i++){
        sprintf(s,"%s%d",ch,0);
        strcpy(ch,s);
    }
    printf("%s\n",s);

    //string拼接
    string str1="skkk";
    stringstream ss;
    ss<<str1;
    for(int i=0;i<5;i++){
        ss<<0;
    }
    cout<<ss.str()<<endl;

    //c11 语法
    //to_string方法会导致多重定义问题,adding #define __USE_MINGW_ANSI_STDIO 0 to the start 
    //of the code,before any includes, which disables the definition of vsnprintf in 
    //stdio.h.
    string str2="ksksks";
    string res = str2 + to_string(5);
    cout<<res<<endl;

    //string 拼接 字符
    string str3=str2+'c';
    cout<<str3<<endl;
    

 

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值