美文网首页
(十五)QT专题-C++字符串

(十五)QT专题-C++字符串

作者: GoodTekken | 来源:发表于2023-02-21 07:40 被阅读0次

    C++中,字符串(character string)最为基本的表达方式就是使用一个以空字节(‘\0’)为结束符的字符数组。下面的4个函数给出了字符串的这些方式:

    void hello1()
    {
     const char str[] = {'H', 'e', 'l', 'l', 'o', '  ', 'w', 'o', 'r', 'l', 'd', '\0'};
     std::cout<< str <<std::endl;
    }
    
    void hello2()
    {
     const char str[] = "Hello world!";
     std::cout<< str <<std::endl;
    }
    
    void hello3()
    {
     std::cout<< "Hello world!"<<std::endl;
    }
    
    void hello4()
    {
     const char* str = "Hello world!";
     std::cout<< str << std::endl;
    }
    
    • 在第一个函数中,把字符串声明为一个数组,并且艰难地对其进行了初始化。需要注意结尾处的“\0”结束符,它表明这里是字符串的结尾。
    • 第二个函数具有相似的数组定义形式,但是这一次使用一串字符文字来初始化数组。在C++中,字符串中的文字是以隐式“\0”结束符结尾的简单常量字符数组。
    • 第三个函数直接使用字符文字,而没有给它指定名字。但一旦转化为机器语言指令,它就与前面的两个函数一样了。
    • 第四个函数则有一点不同,在于它创建的不仅是一个(匿名)数组而且是一个称为str的指针变量,并且用这个指针来存储数组第一个元素的地址。无论这里的形式如何,从语义上来讲,这个函数与前面三个函数都一样,并且一个优化过的编译器会删除这个多余的str变量。

    以C++字符串作为参数的函数通常都带有char, 或者const char。这里给出的一小段程序显示了这两种方法的用法:

    #include <cctype>
    #include <iostream>
    
    void makeUppercase(char *str)
    {
     for(int i = 0; str[i] != '\0'; ++i)
     {
      str[i] = std::toupper(str[i]);
     }
    }
    
    void writeLine(const char* str)
    {
     std::cout<< str << std::endl;i
    }
    
    int main(int argc, char* argv[])
    {
     for(int i =1; i < argc; ++i)
     {
      makeUppercase(argv[i]);
      writeLine(argv[v]);
     }
     return 0;
    }
    

    在C++中,char类型通常保存为8位的值。这就是说,我们可以毫不费力地在一个char数组中存储ASCII,ISO 8859-1(Latin-1)以及其他采用8位编码的字符串,但是在没有使用多字节序列的情况下,就不能存储任意的Unicode字符。Qt提供了强大的QString类,它会把Unicode字符串存储为16位QChar,同时在内部还会使用隐式数据共享(“写时复制”)的优化技术。第11章和第18章曾经详细地介绍了QString类。

    相关文章

      网友评论

          本文标题:(十五)QT专题-C++字符串

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