跳至正文
View Categories

1 min read

主要内容 #

C++中的字符串 #

  • 字符串是借用一维字符数组来存放的,并规定以\0结尾。
  • 字符串使用双引号表示。””
  • 字符串并不是字符数组
  • 它们的定义方式不同
  • // 字符串的定义
    char dashima[] = "A123*";           // 请问如何求长度,长度应该是多少?
    
    
    // 字符数组的定义
    char dashima[] = {'A','1','3','*'}  // 请问如何求长度,长度应该是多少?
  • 它们都不可以直接赋值,只可以用 [ ] 索引
  • // 字符串的定义
    char dsm_string[] = "A123*"; // 
    dsm_string   = "ac";    // 【错误】
    dsm_string[1] = 'a';    // 【正确】
    dsm_string[100] = 'a';  // 【语法正确】,但是实际上超出了长度范围。要【特别注意】,避免这样的错误,编译时并不会提示这种错误。
    
    // 字符数组的定义
    char dsm_cArray[] = {'A','1','3','*'}
    dsm_cArray   = "ac";    // 【错误】
    dsm_cArray[1] = 'a';    // 【正确】
    dsm_cArray[100] = 'a';  // 【语法正确】,但是实际上超出了长度范围。
  • 它们都可以直接输出
  • // 字符串的定义
    char dsm_string[] = "A123*"; // 
    cout << dsm_string << "\n";
    
    // 字符数组的定义
    char dsm_cArray[] = {'A','1','3','*'}
    cout << dsm_cArray << "\n";
  • 字符串尾后会自动加上 ‘\0’,所以它们的 sizeof() 结果有差异。
  • 它们求 strlen() 的处理方式相同,只要遇到 ‘\0’ 就停止计数。输出结果不统计 ‘\0’
  • 请看例子,并回答输出结构【请注意理解】

    // 例子 1 ----------------------------------------
    char dsm_string[] = "A13*";
    char dsm_cArray[] = {'A','1','3','*'};
    
    cout << sizeof(dsm_string) << "\n";    // 5
    cout << sizeof(dsm_cArray) << "\n";    // 4
    
    cout << strlen(dsm_string) << "\n";    // 4
    cout << strlen(dsm_cArray) << "\n";    // 4
    
    // 例子 2 ----------------------------------------
    char dsm_string[] = "A13*\0";
    char dsm_cArray[] = {'A','1','3','*','\0'};
    
    cout << sizeof(dsm_string) << "\n";    // 6
    cout << sizeof(dsm_cArray) << "\n";    // 5
    
    cout << strlen(dsm_string) << "\n";    // 4
    cout << strlen(dsm_cArray) << "\n";    // 4
    
    // 例子 3 ----------------------------------------
    char dsm_string[] = "A13*\0A13";
    char dsm_cArray[] = {'A','1','3','*','\0','A','1','3'};
    
    cout << sizeof(dsm_string) << "\n";    // 9
    cout << sizeof(dsm_cArray) << "\n";    // 8
    
    cout << strlen(dsm_string) << "\n";    // 4
    cout << strlen(dsm_cArray) << "\n";    // 4

    string – 定义 #

    字符串在 C++ 中很重要,而基础的 char [] 形式的字符串,在使用上不是很友好。
    比如:str1、str2两个字符串,则 str1 = str2 这样的写法是【错误的】。但是使用【=】复合大多数人的习惯。
    所以,后来的 C++ 中定义了一种 string 类型,来专门表示字符串。

    请看例程

    #include < iostream >
    #include < string >
    
    int main()
    {
        std::string str1("da");  // string 属于 std 名称空间
        std::string str2 = "dashima";
        str1 = str2;     // 【正确】
        return 0;
    }

    string 是 C++ 标准库中的【类】,类也是一种自定义的数据类型。就像我们讲过的枚举、struct结构体等,都属于自定义数据类型。

  • 这里的 string 的使用方法更加像一般的变量,比如 int 。【请记住这一点】
  • string – 输入输出 #

    依然可以使用 cin 和 cout。
    cin,请注意读取的时候,会忽略开头的【空格】【制表符】【换行符】,当遇到【空格】【制表符】【换行符】则停止读取。

    示例程序:

    #include < iostream >
    #include < string >
    using namespace std;
    int main()
    {
        // 例子 1 ----------------------------------------
        string str;
    
        cout << "请输入一个字符串:\n"; // 请试一试输入:"Hello World",并尝试在开头加上空格。
        cin >> str;
        cout << str << "\n\n\n";
    
        // 例子 2 ----------------------------------------
        string str1, str2, str3;
        cout << "请输入3个字符串,可以使用空格分隔,也可以逐行输入:\n"; // 【空格】【制表符】【换行符】都可以作为字符串的分隔。
        cin >> str1 >> str2 >> str3;
        cout << str1 << "\n";
        cout << str2 << "\n";
        cout << str3 << "\n";
        
        return 0;
    }

    习题 #

    课后练习