美文网首页
c++中的字符串string和C语言中的字符char

c++中的字符串string和C语言中的字符char

作者: 潘雪雯 | 来源:发表于2020-05-19 10:46 被阅读0次

    c++中的字符串string

    在c++中使用string类,必须在程序中包含头文件string #include<string>

    1. 字符串初始化,将string对象声明为简单变量,而非数组,string类变量是一个表示字符串的实体,而char数组是一组用于存储字符串的char存储单元。
    string str1; //定义一个空字符串对象
    string str2 = "panther";//初始化一个字符串
    
    1. 赋值、拼接
    string str2 = "panther";
    string str1;
    str1 = str2; //赋值
    string str3;
    str3 = str1+str2; //拼接
    
    1. string常用函数
    str1.size();//字符串长度
    
    

    以上内容来自《C++ primer》

    C语言中字符char的使用

    • C语言中使用字符数组来模拟字符串
    1. C语言中的字符串是以‘\0’结束的字符数组
    2. C语言中的字符串可以分配于栈空间、堆空间或只读存储区
    • 字符串的初始化
      大括号法初始化列表
    char buf1[] ={'a','b','c','d','\0'};
    char buf2[] = {"abcde"};
    char buf3[] = "abcde";
    char buf4[100] = "abcde";
    
    • 字符串的长度
      strlen()求字符串的长度,注意字符串的长度不包含\0
      sizeof()求字符串的长度,注意字符串的长度包含\0
    void main()
    {
        char buf1[] = "abcdef,acccd,eeee,aaaa,e3eeeee,sssss";
        cout << strlen(buf2) << endl ;
            cout << sizeof(buf3) << endl;      
     } 
    
    image.png
    • 数组法和指针法操作字符串
    for(i = 0;i<100;i++)
    {
        cout << buf1[i] ;
    }      
    cout << endl;
        
    for(i = 0;i<100;i++)
    {
        cout << *(buf1+i));
    }      
    cout << endl;
    
    从内存四区理解一级指针内存模型
    • 字符串做函数参数
      四种字符串拷贝函数
    //用字符串初始化字符数组 
    //strlen() 长度 不包括0
    ///sizeof() 内存块的大小 
    int main2()
    {
        char a[] = "i am a student";
        char b[64];
        //把字符串a拷贝到buf
        int i =0;
        for(i=0;*(a+i)!='\0';i++)
        {
           *(b+i) = *(a+i); 
        } 
        //0没有copy到b的buf中
        b[i] = '\0';
        printf("a:%s \n",a);
        printf("b:%s \n",b); 
        printf("hello...\n");
     } 
     
     //字符串copy函数技术推演
     //完成字符串拷贝工作,
     void copy_str21(char *from,char *to)
     {
        for( ; *from!='\0'; from++,to++)
        {
           *to = *from; 
        }
        
        *to = '\0';
         
      } 
      
      //*p操作和++的操作谁的优先级高 
      // ++ 优先级高 
      void copy_str22(char *from,char *to)
     {
        for( ; *from!='\0';)
        {
           *to++ = *from++; //先执行*to = *from 再执行 to++ 和from ++ 
        }
        
        *to = '\0';
         
      } 
      
     void copy_str23(char *from,char *to)
     {
        while((*to = *from) !='\0')
        {
            from++;
            to++;
        }
      }
      
     int main()
     {
        char *from="abcd";
        char buf2[100];
        copy_str22(from,buf2);
        printf("buf2:%s \n",buf2);
        printf("hello...\n"); 
    } 
    
    • 字符串中常见错误
    1. 子函数中定义的变量z是临时分配的内存空间,在子函数结束时销毁,并不能返回。
    char *str_cnct(char *x, char* y)     /*简化算法*/
    {
        char str3[80];
        char *z=str3;   /*指针z指向数组str3*/ 
        while(*z++=*x++);
        z--;                   /*去掉串尾结束标志*/
        while(*z++=*y++);
        z=str3;      /*将str3地址赋给指针变量z*/
        return(z);
    }
    
    1. 字符串常量不能修改
    Char *p = “abcdefg”;
    Modify p[1] = ‘1’;
    

    给出亲身经历的案例,希望大家参考。当时面某公司时给出一道题是这样的

    4,排序题, 把下面的字符串里的字符按ASCII码从小到大排列.
    char *str = "54321abCdEf";
    代码:
    

    当时没想那么多,感觉就是简单的排序吧,直接拿去做了。结果后面一直没有调试成功,事后才发现面试官给的题目中有坑。当指针指向常量字符串时不能修改字符串的值

    int main()
    {
        char str[] = "54321abCdEf";
           // char *str = "54321abCdEf"; 错误的方式
        char t = 0;
        int strLen = strlen(str);
        cout << strLen << endl;
        for(int i = 1;i<strLen ;i++)
        {
            for(int j = 0;j<strLen-i;++j)
            {
                if(str[j+1] < str[j])
                {
                    t        = str[j];
                    str[j]   = str[j+1];
                    str[j+1] = t;
                }
            }
        }
        
        for(int i = 0;i<strLen;i++)
        {
            cout << str[i] << " ";
        }
        cout << endl;
        return 0;
    }
    
    1. 不要不断修改指针变量的值
    char *a = (char *)malloc(50);
    *a++ = i++;
    free(a);
    
    1. 指针变量释放后要赋值不然会变成野指针
    Main ()
    {
        char *p = str_cnct(“abcd”, “ddeee”);
        if (p != NULL) 
        {
            Free(p) ;
            p = NULL;
    }//释放之后要赋值为NULL不然会变成野指针
    
    

    以上内容来自《传智播客C++课程讲义》

    相关文章

      网友评论

          本文标题:c++中的字符串string和C语言中的字符char

          本文链接:https://www.haomeiwen.com/subject/naevohtx.html