C++字符串教程

一、引言

在 C++编程中,字符串是一种常用的数据类型,用于存储文本信息。C++提供了两种主要的表示字符串的方式:char[](字符数组)和 stringstd::string 类)。本教程将详细介绍这两种字符串表示方法的使用,包括它们的声明、初始化、输入输出、常见操作和一些重要的特性。

二、字符数组(char[])

(一)声明和初始化

可以使用 char[] 来存储字符串,需要注意的是,字符串需要以 '\0'(空字符)结尾,它表示字符串的结束。

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 声明并初始化一个字符数组
    char str1[] = "Hello, World!";

    // 声明一个指定大小的字符数组,并初始化
    char str2[20] = "Hello";

    // 声明一个未初始化的字符数组
    char str3[10];

    // 输出字符数组
    cout << str1 << endl;
    cout << str2 << endl;
    return 0;
}

在上述代码中:

  • char str1[] = "Hello, World!"; 声明并初始化一个字符数组,编译器会自动添加 '\0' 结尾。
  • char str2[20] = "Hello"; 声明一个大小为 20 的字符数组,存储 "Hello",未使用的空间将被初始化为 '\0' 或其他不确定值。
  • char str3[10]; 声明一个未初始化的字符数组,可能包含垃圾值,且不包含 '\0'

(二)输入输出字符数组

可以使用 cincout 进行输入输出,但要注意输入的长度不能超过数组的长度,否则会导致缓冲区溢出。

#include <bits/stdc++.h>
using namespace std;

int main() {
    char str[20];
    // 输入字符串
    cout << "请输入一个字符串:";
    cin >> str;
    // 输出字符串
    cout << "你输入的字符串是:" << str << endl;
    return 0;
}

这里使用 cin >> str; 输入字符串,但如果输入的字符串长度超过 19(因为要留一个位置给 '\0'),会导致问题。为了避免这个问题,可以使用 cin.getline()

(三)使用 cin.getline() 输入完整行

cin.getline() 可以读取包含空格的完整行,需要指定数组大小。

#include <bits/stdc++.h>
using namespace std;

int main() {
    char str[50];
    // 输入完整行字符串
    cout << "请输入一行字符串:";
    cin.getline(str, 50);
    // 输出字符串
    cout << "你输入的字符串是:" << str << endl;
    return 0;
}

cin.getline(str, 50); 会读取一行输入,最多读取 49 个字符,并自动添加 '\0'

(四)字符串操作

可以使用 C 语言的标准库函数(如 strlen()strcpy()strcat() 等)对字符数组进行操作,但需要包含 <cstring> 头文件(使用 <bits/stdc++.h> 时已包含)。

#include <bits/stdc++.h>
using namespace std;

int main() {
    char str1[20] = "Hello";
    char str2[20] = " World";
    // 连接两个字符串
    strcat(str1, str2);
    // 输出结果
    cout << "连接后的字符串:" << str1 << endl;

    // 计算字符串长度
    int len = strlen(str1);
    cout << "字符串的长度:" << len << endl;
    return 0;
}
  • strcat(str1, str2); 连接 str1str2 两个字符串。
  • strlen(str1); 计算 str1 的长度。

三、字符串类(string)

(一)声明和初始化

string 是 C++标准库中的类,使用更方便,无需考虑长度和结尾的 '\0'

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 声明并初始化一个 string
    string str1 = "Hello, World!";

    // 声明一个空的 string
    string str2;

    // 输出 string
    cout << str1 << endl;
    return 0;
}

string str1 = "Hello, World!"; 声明并初始化一个 string 对象,string str2; 声明一个空的 string 对象。

(二)输入输出 string

使用 cincout 输入输出 string 更安全和方便。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str;
    // 输入字符串
    cout << "请输入一个字符串:";
    cin >> str;
    // 输出字符串
    cout << "你输入的字符串是:" << str << endl;
    return 0;
}

这里使用 cin >> str; 输入字符串,会自动处理字符串长度,不用担心缓冲区溢出。

(三)使用 getline 输入完整行

使用 getline(cin, str); 可以输入包含空格的完整行。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str;
    // 输入完整行字符串
    cout << "请输入一行字符串:";
    getline(cin, str);
    // 输出字符串
    cout << "你输入的字符串是:" << str << endl;
    return 0;
}

getline(cin, str); 可以读取包含空格的完整行,并存储到 str 中。

(四)字符串操作

string 类提供了许多成员函数,使字符串操作更加简洁和安全。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str1 = "Hello";
    string str2 = " World";
    // 连接两个字符串
    string str3 = str1 + str2;
    // 输出结果
    cout << "连接后的字符串:" << str3 << endl;

    // 获取字符串长度
    int len = str3.length();
    cout << "字符串的长度:" << len << endl;

    // 查找子串
    size_t found = str3.find("World");
    if (found!= string::npos) {
        cout << "子串的位置:" << found << endl;
    }
    return 0;
}

在上述代码中:

  • str1 + str2 连接两个 string 对象。
  • str3.length() 获取 str3 的长度。
  • str3.find("World") 查找子串 "World",如果找到,返回子串的起始位置,否则返回 string::npos

(五)修改字符串

可以使用 [] 运算符或 at() 方法修改 string 中的字符。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str = "Hello";
    // 修改字符
    str[0] = 'h';
    str.at(1) = 'e';
    cout << "修改后的字符串:" << str << endl;
    return 0;
}

str[0] = 'h';str.at(1) = 'e'; 都可以修改 string 中的字符,但 at() 方法会进行边界检查。

(六)字符串比较

可以使用比较运算符(==, !=, <, >, <=, >=)比较两个 string

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str1 = "apple";
    string str2 = "banana";
    if (str1 < str2) {
        cout << "apple 小于 banana" << endl;
    }
    return 0;
}

使用比较运算符可以直接比较两个 string 对象的大小。

四、总结

本教程介绍了 C++中两种表示字符串的方式:char[]stringchar[] 是 C 风格的字符串,更接近 C 语言的实现,使用时需要注意长度和结尾的 '\0'string 是 C++标准库中的类,提供了更多方便和安全的操作,适合大多数情况。在实际编程中,根据具体需求选择使用 char[]string,通常 string 会让代码更简洁和易于维护。如果你在使用字符串时遇到问题或需要进一步的帮助,请随时联系我。

这个文档涵盖了 C++中 char[]string 的基本操作和使用方法,包括声明、初始化、输入输出、操作和比较。通过使用这些知识,你可以更好地处理 C++程序中的文本信息。希望本教程能帮助你在 C++编程中更有效地使用字符串。

0 条评论

目前还没有评论...