C++字符操作教程

字符串

●【1】字符数组

在 C++ 中,字符数组是一种特殊的数组类型,用于存储一串字符。字符数组在程序中广泛应用,例如存储字符串、输入输出字符串、处理字符串等,需要头文件#include <cstring>

定义一个字符数组的基本语法如下:

char str[] = "hello world"; // 可以指定长度也可以不指定长度

在上述示例中,定义了一个名为 str 的字符数组,用于存储字符串 "hello world"。由于字符数组的长度是不确定的,因此可以省略数组长度。

可以使用下标运算符 [] 访问字符数组中的元素。例如:

char ch = str[0];  // 将字符数组的第一个字符赋值给变量 ch
字符串输入输出

在 C++ 中,可以使用输入输出流对象 cincout 进行字符串的输入输出。

使用 cin 进行字符串的输入时,可以使用 getline() 函数,该函数会读取一行字符串(包括空格),并将其存储到字符数组中。例如:

char str[100];
cout << "请输入一个字符串:" << endl;
cin.getline(str, 100);
cout << "输入的字符串为:" << str << endl;

在上述示例中,使用 cin.getline() 函数读取一行字符串,并将其存储到名为 str 的字符数组中。然后使用 cout 输出该字符数组中的内容。

使用 cout 进行字符串的输出时,可以直接输出字符数组的名称,该操作会将整个字符数组中的内容输出到屏幕上。例如:

char str[] = "hello world";
cout << str << endl;
字符数组处理函数
  • strlen() 函数:返回字符数组中的字符串长度(不包括空字符 \0)。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main(){
        char str[] = "hello world";
        int len = strlen(str);
        cout << "字符串长度为:" << len << endl;
        return 0;
    }

    在上述示例中,使用 strlen() 函数获取字符串 "hello world" 的长度,并将其赋值给变量 len,然后输出字符串长度。

  • strcpy() 函数:将一个字符数组中的字符串复制到另一个字符数组中。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main(){
        char str1[] = "hello world";
        char str2[20];
        strcpy(str2, str1);
        cout << "复制后的字符串为:" << str2 << endl;
        return 0;
    }

    在上述示例中,使用 strcpy() 函数将字符数组 str1 中的字符串复制到字符数组 str2 中,并输出复制后的字符串。

  • strcat() 函数:将一个字符数组中的字符串连接到另一个字符数组中。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main(){
        char str1[20] = "hello ";
        char str2[] = "world";
        strcat(str1, str2);
        cout << "连接后的字符串为:" << str1 << endl;
        return 0;
    }

    在上述示例中,使用 strcat() 函数将字符数组 str2 中的字符串连接到字符数组 str1 中,并输出连接后的字符串。

  • strcmp() 函数:比较两个字符数组中的字符串是否相同。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main(){
        char str1[] = "hello";
        char str2[] = "world";
        if (strcmp(str1, str2) == 0){
            cout << "两个字符串相同" << endl;
        } else {
            cout << "两个字符串不同" << endl;
        }
        return 0;
    }

    在上述示例中,使用 strcmp() 函数比较字符数组 str1 和字符数组 str2 中的字符串是否相同,如果相同则输出 "两个字符串相同",否则输出 "两个字符串不同"。

注意事项

在使用字符数组时,需要注意以下几点:

  • 字符数组需要预留一个额外的空间来存储空字符 \0,该字符用于标记字符串的结束。

  • 字符数组在定义时需要指定长度,否则将无法存储完整的字符串。

  • 字符数组中的字符串不可修改,因此需要使用字符串处理函数来完成字符串的修改操作。

●【2】字符串

string 是 C++ 标准库中的字符串类型,它提供了灵活、高效且易于使用的字符串处理功能。与 C 风格的字符数组相比,string 更安全、更易于管理,并具有更多的功能。

C++ 中的 string 类型是用于表示字符串的一种数据类型,它可以存储任意长度的字符串,并提供了一些常用的字符串操作方法,例如字符串的连接、查找、替换、截取等,需要#include <string>

声明和初始化
#include <string>
string s1;                  // 默认构造函数,创建一个空字符串
string s2("Hello");         // 从 C 风格字符串初始化
string s3 = "World";        // 从 C 风格字符串初始化,使用赋值语法
string s4(s2);              // 使用另一个 string 对象初始化
string s5(5, 'a');          // 用特定字符重复多次来初始化
​
const char *c_str = "Hello, World!"; // 根据字符数组创建字符串
string str(c_str);
字符串输入
不带空格
string str;
cin >> str; // 读取一个字符串(遇到空白字符会停止)
带空格
string str;
getline(cin, str); // 读取一行字符串(包括空白字符)
字符串输出
cout输出
string str = "HelloWorld";
cout << str; 
使用下标遍历
for(int i = 0; i < str.size(); i++){
    cout << str[i] << endl;
}
使用范围 for 循环遍历
for(char ch : str){
    cout << ch << endl;
}
string处理函数
length() / size()
  • 字符串长度:length()size() 成员函数,返回字符串对象中字符的数量。

    size_t length() const noexcept;
    size_t size() const noexcept;

    lengthsize 函数返回字符串的长度。返回值类型为 size_t

    string str = "hello world";
    size_t len = str.length();
    cout << "字符串长度为:" << len << endl;

    在上述示例中,使用 length() 函数获取字符串 "hello world" 的长度,并将其赋值给变量 len,然后输出字符串长度。

empty()
  • 检查字符串是否为空:empty() 成员函数,返回字符串是否为空(不包含任何字符)。

    bool empty() const noexcept;

    empty 函数返回字符串是否为空。如果字符串为空,返回 true;否则返回 false

    string str1 = "hello";
    string str2 = "";
    bool isEmpty1 = str1.empty();
    bool isEmpty2 = str2.empty();
    cout << "字符串str1是否为空:" << isEmpty1 << endl;
    cout << "字符串str2是否为空:" << isEmpty2 << endl;

    在上述示例中,使用 empty() 函数检查字符串 "hello" 和空字符串是否为空,并输出结果。

append()
  • 添加字符串:append() 成员函数,将给定的字符串添加到当前字符串的末尾。

    string& append(const string& str);
    string& append(const string& str, size_t pos, size_t count);
    string& append(const char* str);
    string& append(const char* str, size_t count);
    string& append(size_t count, char ch);

    append 函数用于将给定的字符串添加到当前字符串的末尾。它有多种重载形式,可接受不同类型的参数。

    • 将一个字符串对象添加到当前字符串末尾

    • 从给定字符串的指定位置开始,添加指定数量的字符到当前字符串末尾

    • 将一个字符数组添加到当前字符串末尾

    • 将一个字符数组中指定数量的字符添加到当前字符串末尾

    • 将指定数量的某个字符添加到当前字符串末尾

    string str1 = "hello";
    str1.append(" world");
    cout << "添加后的字符串为:" << str1 << endl;

    在上述示例中,使用 append() 函数将字符串 " world" 添加到字符串 "hello" 的末尾,并输出结果。

substr()
  • 提取子字符串:substr() 成员函数,返回一个从指定位置开始的指定长度的子字符串。

    string substr(size_t pos = 0, size_t len = npos) const;

    substr 函数返回一个从 pos 位置开始,长度为 len 的子字符串。

    string str = "hello world";
    string sub = str.substr(0, 5);
    cout << "子字符串为:" << sub << std::endl;

    在上述示例中,使用 substr() 函数从字符串 "hello world" 中提取一个从位置 0 开始,长度为 5 的子字符串,并将其赋值给变量 sub,然后输出子字符串。

find()
  • 查找子字符串:find() 成员函数,查找指定子字符串在当前字符串中首次出现的位置。

    size_t find(const string& str, size_t pos = 0) const noexcept;

    find 函数在当前字符串中从位置 pos 开始查找子字符串 str 首次出现的位置。如果找到,返回子字符串的起始位置;如果找不到,返回 npos

    string str = "hello world";
    size_t pos = str.find("world");
    if(pos != string::npos){
        cout << "找到子字符串,位置为:" << pos << endl;
    }else{
        cout << "未找到子字符串" << endl;
    }

    在上述示例中,使用 find() 函数查找子字符串 "world" 在字符串 "hello world" 中首次出现的位置,并将其赋值给变量 pos,然后输出位置。

replace()
  • 替换子字符串:replace() 成员函数,用指定字符串替换当前字符串中指定位置开始的指定长度的子字符串。

    string& replace(size_t pos, size_t len, const string& str);

    replace 函数从位置 pos 开始,用字符串 str 替换长度为 len 的子字符串。

    string str = "hello world";
    str.replace(0, 5, "goodbye");
    cout << "替换后的字符串为:" << str << endl;

    在上述示例中,使用 replace() 函数替换字符串 "hello world" 中从位置 0 开始,长度为 5 的子字符串为 "goodbye",然后输出替换后的字符串。

push_back() / pop_back()
  • 添加/删除字符:push_back()pop_back() 成员函数,分别用于在字符串末尾添加字符和删除末尾字符。

    void push_back(char c);
    void pop_back();

    push_back 函数在字符串末尾添加字符 cpop_back 函数删除字符串末尾的字符。

    string str = "hello";
    str.push_back('!');
    cout << "添加字符后的字符串为:" << str << endl;
    str.pop_back();
    cout << "删除字符后的字符串为:" << str << endl;

    在上述示例中,首先使用 push_back() 函数在字符串 "hello" 的末尾添加字符 '!',然后输出添加后的字符串;接着使用 pop_back() 函数删除末尾字符,然后输出删除后的字符串。

erase()
  • 删除子字符串:erase() 成员函数,删除字符串中指定位置开始的指定长度的子字符串。

    string& erase(size_t pos = 0, size_t len = npos);

    erase 函数从位置 pos 开始删除长度为 len 的子字符串。

    string str = "hello world";
    str.erase(5, 6);
    cout << "删除后的字符串为:" << str << endl;

    在上述示例中,使用 erase() 函数删除字符串 "hello world" 中从位置 5 开始,长度为 6 的子字符串,并输出删除后的字符串。

insert()
  • 插入字符串:insert() 成员函数,将给定的字符串插入到当前字符串的指定位置。

    string& insert(size_t index, const string& str);
    string& insert(size_t index, const string& str, size_t pos, size_t count);
    string& insert(size_t index, const char* str);
    string& insert(size_t index, const char* str, size_t count);
    string& insert(size_t index, size_t count, char ch);

    insert 函数用于将给定的字符串插入到当前字符串的指定位置。它有多种重载形式,可接受不同类型的参数。

    • 在当前字符串指定位置插入一个字符串对象

    • 在当前字符串指定位置插入给定字符串的指定位置开始的指定数量的字符

    • 在当前字符串指定位置插入一个字符数组

    • 在当前字符串指定位置插入一个字符数组中指定数量的字符

    • 在当前字符串指定位置插入指定数量的某个字符

    string str1 = "hello";
    str1.insert(5, " world");
    cout << "插入后的字符串为:" << str1 << endl;

    在上述示例中,使用 insert() 函数将字符串 " world" 插入到字符串 "hello" 的第 5 个位置,并输出结果。

字符数组与字符串的关系

字符数组: char类型的集合

// 注意'\0'存在 
char s[6] = {'1', '2', '3', '4', '5', '6'}; 
cout << s << endl; 
s[3] = '\0';
cout << s << endl;
​
char s[6] = {"12345"};
char s[6] = "12345";
// 上面两种写法都行, 但是长度最多只能填5个, 自带一个'\0';

字符串: 在C++里面对C语言的字符数组进行的封装

区别字符数组string
头文件#include <cstring>#include <string>
长度strlen(s)s.size() / s.length()
拼接strcat(s1, s2) => s2拼在s1后面s1 += s2;
复制strcpy(s1, s2) => s2给s1s1 = s2;
比较strcmp(s1, s2) => 正s1大, 负s2大, 0一样大> < >= <= == !=
cctype头文件
#include <cctype>
char c;
cctype头文件中的常用函数列表如下:
​
函数名称 返回值
isupper() 如果参数是大写字母, 函数返回true
islower() 如果参数是小写字母, 函数返回true
isdigit() 如果参数是数字(0~9), 函数返回true
​
isalnum() 如果参数是字母数字, 即字母或者数字, 函数返回true
isalpha() 如果参数是字母, 函数返回true
    
iscntrl() 如果参数是控制字符, 函数返回true
isgraph() 如果参数是除空格之外的打印字符, 函数返回true
isprint() 如果参数是打印字符(包括空格), 函数返回true
ispunct() 如果参数是标点符号, 函数返回true
isspace() 如果参数是标准空白字符, 如空格、换行符、水平或垂直制表符, 函数返回true
​
isxdigit() 如果参数是十六进制数字, 即0~9、a~f、A~F, 函数返回true
​
tolower() 如果参数是大写字符, 返回其小写, 否则返回该参数
toupper() 如果参数是小写字符, 返回其大写, 否则返回该参数

爆肝了3个小时,制作不易,收藏点赞加评论,下次再见!

  • 33
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c 字符串替换指定字符是指将字符串中的某个字符替换成另一个字符。可以通过循环遍历字符串的每个字符,然后判断是否需要替换,若需要替换则将字符替换成目标字符,最后得到新的字符串。 具体步骤可以如下: 1. 定义一个空字符串作为替换后的结果。 2. 使用for循环遍历源字符串中的每个字符。 3. 判断当前字符是否需要替换,如果是需要替换的字符则将其替换成目标字符,否则保持不变。 4. 将替换后的字符添加到结果字符串中。 5. 循环结束后,结果字符串就是替换完成后的最终结果。 以下是一个示例代码,演示了如何实现字符串替换指定字符: ```python def replace_char(string, source_char, target_char): result = "" for char in string: if char == source_char: result += target_char else: result += char return result # 调用示例 source_string = "Hello, world!" source_char = "o" target_char = "*" replaced_string = replace_char(source_string, source_char, target_char) print(replaced_string) ``` 以上代码将字符串中的所有小写字母 "o" 替换成了星号 "*",输出结果为 "Hell*, w*rld!"。如果需要替换其他字符,只需修改参数即可。 这是实现字符串替换指定字符的基本思路,可以根据实际需要进行适当的修改和优化。 ### 回答2: 字符串替换指定字符是指在一个字符串中将指定的字符替换为新的字符字符串。使用C语言可以通过遍历字符串,找到匹配的字符并进行替换来实现。 首先,我们需要声明一个字符数组来存储字符串,例如: ```c char str[] = "Hello, World!"; ``` 然后,我们可以使用循环遍历字符串中的每个字符,判断是否需要替换。假设我们想将字符'e'替换为字符'X',可以使用如下代码: ```c for (int i = 0; i < strlen(str); i++) { if (str[i] == 'e') { str[i] = 'X'; } } ``` 以上代码会遍历字符串中的每个字符,如果字符是'e',就将其替换为'X'。如果我们想要替换的是一个字符串,可以使用库函数`strcpy`来实现: ```c #include <string.h> char str[] = "Hello, World!"; char replace[] = "X"; char *ptr = strstr(str, "o"); if (ptr != NULL) { strcpy(ptr, replace); } ``` 以上代码会用新字符串"X"替换原字符串中首次出现的"o"。 ### 回答3: 字符串替换是指将一个字符串中的指定字符替换为另一个字符。为了实现这个功能,可以使用编程语言中的字符串替换函数或方法。 一个常见的例子是使用Python编程语言中的replace()方法来替换字符串中的指定字符。replace()方法接受两个参数,第一个参数是要替换的字符,第二个参数是替换后的字符。以下是一个示例代码: ```python string = "Hello, World!" new_string = string.replace("o", "0") print(new_string) ``` 运行上述代码,输出的结果将是: ``` Hell0, W0rld! ``` 在这个例子中,我们将字符串中的所有字符"o"替换为"0",并将新的字符串赋值给变量new_string。输出的结果是新的字符串"Hello, World!"中所有字符"o"被替换为"0"。 在其他编程语言中,也有类似的字符串替换函数或方法可以使用。只需查阅相应编程语言的文档或教程,了解如何使用字符串替换函数或方法即可实现字符串的替换操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值