zoukankan      html  css  js  c++  java
  • 浅谈char字符类型和string字符串类型

    char和string 两者关系很微妙,因为都是字符,但是他们直接的联系却不是很多,这里我和大家聊聊字符的两大势力的相爱相杀。

    char也就是字符型数据定义,string也就是字符串类型数据定义,乍一看他们很想,一个是字符一个是字符串,字符串不就是字符串起来得到的吗?但是事实上,字符串即是“字符”串起来也不是“字符”串起来,听起来是不是很奇怪,这里面的两个字符的意义其实是不一样的,第一个“字符”的意思是指一个单位的字形、类字形单位或符号的基本信息,而第二个“字符”的意思是字符类型。可能大家听得还是很糊涂,我帮大家捋一捋,我们现在要先弄清楚一点,char是字符类型,属于一个类,属于编程语言中的一个数据类型,而他和字符有区别,字符是什么?字符指的是一个基本信息单位,也就是说字符是一个数据,它可以是数字也可以是字母。

    所以,char是一个可以用来存储字符数据的变量类型,而string就是一个存储一串字符数据的变量类型,他们的共同点就是他们都是变量类型,都是用来存储字符的。

    我想这样说大家应该明白了,既然他们俩如此相像,也就免不了他们要常常互动了,不过在讲他们的交互之前,我要和大家再提一个概念,不过希望大家能先理清刚刚讲的再看,不然会越看越乱的。

    下面我要说的就是字符数组,char[],他是一组char类变量组成的,也可以用来存储一串字符数据,和string的作用很是相像,但是本质是不一样的,他们应该是数组变量,一个是类变量,char[]很好理解,他就是一个数组,每个单元里面放一个字符数据,string则是一个整体,最后以字符’’,作为分隔标识,而且他还有很多类函数可以调用使用。

    下面举个例子:

    #include<iostream>
    #include<string>
    using namespace std;
    void main()
    {
        string Lyu;
        Lyu = "I love C++";
        cout << "字符串为:" + Lyu << endl;
        cout << "字符串的长度为:" << Lyu.length() << endl;
        cout << "是否为空:" << Lyu.empty() << endl << endl;        //若返回值为0,则指字符串不为空
        Lyu.append("!");            //字符串后追加一个!
        cout << "追加修改后的字符串为:" << Lyu << endl << endl;
        string Lyu_2;
        Lyu_2 = "I love too";
        Lyu.swap(Lyu_2);            //字符串数据交换
        cout << "交换修改后的字符串为:" << Lyu << endl << endl;
        int site;
        site = Lyu.find('l', 0);    //从0开始寻找出现l的位置并返回位置
        cout << "字符串中出现l的位置为:" << site << endl;
        site = Lyu.find("oo", 0);    //从0开始寻找出现oo的位置并返回位置
        cout << "字符串中出现oo的位置为:" << site << endl << endl;
        site = 0;                //遍历搜索所有o的位置
        do
        {
            site = Lyu.find('o', site);
            if (site == -1)
                cout << "搜索完毕,无其他项" << endl;
            else
                cout << "字符串中出现o的位置为:" << site << endl;
            site++;
        } while (site != 0);
        getchar();
    }

    它的执行结果是:

    和大家提了几个常用函数,如

    length()函数——查看字符串的长度

    empty()函数——检查字符串是否为空,0表示不为空

    append("字符串")——在字符串后添加新字符

    find('字符', 0)——从0位查看第一个出现的该字符的位置

    ……

    具体理论区别大家有兴趣可以去自行研究,我就不做太深入的介绍了,下面就到正题,这两者的相互转化。

    string类怎么转换成一个char数组

    下面是代码

    #include<iostream>
    #include<string>
    using namespace std;
    void main()
    {
        string LyuS = "Welcome to learn C++";
        const char *LyuC = LyuS.data();        //字符串转换为字符数组
        cout << "LyuC :"<< LyuC << endl;
        for(int i = 0 ; i < LyuS.length() ; i ++)
            cout << "LyuC[" << i << "] :" << LyuC[i] << endl;
        char LyuC_2[10];
        LyuC_2[0] = 'a';            //给字符数组进行赋值
        for (int j = 1; j < 9; j++)
        {
            LyuC_2[j] = LyuC_2[j - 1] +1;
        }
        LyuC_2[9] = '';
        string LyuS_2 = LyuC_2;            //字符数组转化成字符串
        cout << "LyuS_2 :" << LyuS_2;
        getchar();
    }

    它的执行结果是:

    const char *LyuC = LyuS.data();

    这句话就是字符串转字符数组,我在不少资料里面发现他们把字符数组和字符指针分开了,其实在C++里面数组在某种意义上就是连续不断的指针,当然只限于在用法上,所以对于初学者如果不是要求完成度特别高,可以这么用.

    string LyuS_2 = LyuC_2;

    字符数组转成字符串就很是容易了,直接赋值即可。

    好了,今天的分享到此为止,希望大家能对这两种字符存储类型有所了解。

    https://blog.csdn.net/yu1543376365/article/details/79176606

    它的执行结果是:

  • 相关阅读:
    1094. Car Pooling
    121. Best Time to Buy and Sell Stock
    58. Length of Last Word
    510. Inorder Successor in BST II
    198. House Robber
    57. Insert Interval
    15. 3Sum java solutions
    79. Word Search java solutions
    80. Remove Duplicates from Sorted Array II java solutions
    34. Search for a Range java solutions
  • 原文地址:https://www.cnblogs.com/sggggr/p/12336578.html
Copyright © 2011-2022 走看看