C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)

简介: C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)

一、字符串构造

// 字符串的构造
void test01() {
    //默认构造
    string s1;
    //使用char*字符串构造
    const char *str = "hello world";
    string s2(str);
    cout << "s2=" << s2 << endl;
    //使用string对象初始化
    string s3(s2);
    cout << "s3=" << s3 << endl;
    //使用n个字符初始化
    string s4(10, 'a');
    cout << "s4=" << s4 << endl;
};

二、字符串赋值

/**
 * 赋值操作
 * string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s赋给当前的字符串
string& operator=(char c);//字符值给当前的字符串
string& assign(const char *s);//把字符串s赋给当前的字符串
string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s);//把字符串s赋给当前字符串
string& assign(int n, char c);//用n个字符赋给当前字符串
 */
void test02() {
    string str1;
    str1 = "hello world";
    cout << "str1 = " << str1 << endl;
    string str2;
    str2 = str1;
    cout << "str2 = " << str2 << endl;
    string str3;
    str3 = 'a';
    cout << "str3 = " << str3 << endl;
    string str4;
    str4.assign("hello C++");
    cout << "str4 = " << str4 << endl;
    string str5;
    str5.assign("hello C++", 5);
    cout << "str5 = " << str5 << endl;
    string str6;
    str6.assign(str5);
    cout << "str6 = " << str6 << endl;
    string str7;
    str7.assign(10, 'e');
    cout << "str7 = " << str7 << endl;
};

三、字符串拼接

//string字符串拼接
/**
 *string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& operator+=(const string& str);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=(const string& str)
string& append(const string &s,int pos,int n); //字符s中从pos开始的n个字符连接到字符串结尾
  */
void test03() {
    string str1 = "我";
    str1 += "爱玩游戏";
    cout << "str1 = " << str1 << endl;
    str1 += ":";
    cout << "str1 = " << str1 << endl;
    string str2 = "LOL DNF";
    str1 += str2;
    cout << "str1 = " << str1 << endl;
 
    string str3 = "I";
    str3.assign(" love ");
    cout << "str3 = " << str3 << endl;
 
    str3.append("game abcde", 5);
    cout << "str3 = " << str3 << endl;
 
    // str3.append(str2);
    str3.append(str2, 0, 3);
    cout << "str3 = " << str3 << endl;
 
};

四、字符串查找

//字符串查找
void test04() {
    string str = "abcdefgde";
    // 从左往右查
    int pos = str.find("de");
    cout << "pos = " << pos << endl;
    //从右往左查
    pos = str.rfind("de");
    cout << "rfind pos = " << pos << endl;
};

五、字符串替换

//字符串替换
void test05() {
    string str1 = "abcdefg";
    //从1位置起2个字符,替换为"1231231"
    str1.replace(1, 2, "1231231");
    // str1=a1231231defg
    cout << "str1=" << str1 << endl;
};

六、字符串比较

//字符串比较
// = 返回 0
// > 返回 1
//< 返回 -1
void test06() {
    string str1 = "aello";
    string str2 = "hello";
    if (str1.compare(str2) == 0) {
        cout << "str1等于str2" << endl;
    } else if (str1.compare(str2) > 0) {
        cout << "str1大于str2" << endl;
    } else {
        cout << "str1小于str2" << endl;
    }
};

七、字符串存取

//string 字符存取
void test07() {
    string str = "hello";
    // cout << "str=" << str << endl;
    //1、通过[]访问单个字符
    for (int i = 0; i < str.size(); ++i) {
        cout << str[i] << " ";
    }
    cout << endl;
    //2、通过at方法访问单个字符
    for (int i = 0; i < str.size(); ++i) {
        cout << str.at(i) << " ";
    }
    cout << endl;
    //修改单个字符
    str[0] = 'x';
    str.at(1) = 'x';
    // xxllo
    cout << "str=" << str << endl;
}

八、字符串插入删除

/*
 * string& insert(int pos, const char* s);//插入字符串
string& insert(int pos, const string& str);//插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n个字符
string& erase(int pos, int n = npos);//删除从Pos开始的n个字符
 */
//字符串的插入和删除
void test08() {
    string str = "hello";
//     插入
    str.insert(1, "111");
    // h111ello
    cout << str << endl;
    //hello
    str.erase(1, 3);
    cout << str << endl;
}

九、子串

//string子串
void test09() {
    string str = "abcdef";
    string subStr = str.substr(1, 3);
    // subStr=bcd
    cout << "subStr=" << subStr << endl;
 
    string email = "zhangsan@sina.com";
    //从邮件地址中获取用户名信息
    int pos = email.find("@");
    cout<<pos<<endl;
    string userName = email.substr(0, pos);
    cout << userName << endl;
}

十、测试

#include <iostream>
#include <string>
 
using namespace std;
 
// 字符串的构造
void test01() {
    //默认构造
    string s1;
    //使用char*字符串构造
    const char *str = "hello world";
    string s2(str);
    cout << "s2=" << s2 << endl;
    //使用string对象初始化
    string s3(s2);
    cout << "s3=" << s3 << endl;
    //使用n个字符初始化
    string s4(10, 'a');
    cout << "s4=" << s4 << endl;
};
 
/**
 * 赋值操作
 * string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s赋给当前的字符串
string& operator=(char c);//字符值给当前的字符串
string& assign(const char *s);//把字符串s赋给当前的字符串
string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s);//把字符串s赋给当前字符串
string& assign(int n, char c);//用n个字符赋给当前字符串
 */
void test02() {
    string str1;
    str1 = "hello world";
    cout << "str1 = " << str1 << endl;
    string str2;
    str2 = str1;
    cout << "str2 = " << str2 << endl;
    string str3;
    str3 = 'a';
    cout << "str3 = " << str3 << endl;
    string str4;
    str4.assign("hello C++");
    cout << "str4 = " << str4 << endl;
    string str5;
    str5.assign("hello C++", 5);
    cout << "str5 = " << str5 << endl;
    string str6;
    str6.assign(str5);
    cout << "str6 = " << str6 << endl;
    string str7;
    str7.assign(10, 'e');
    cout << "str7 = " << str7 << endl;
};
//string字符串拼接
/**
 *string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& operator+=(const string& str);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=(const string& str)
string& append(const string &s,int pos,int n); //字符s中从pos开始的n个字符连接到字符串结尾
  */
void test03() {
    string str1 = "我";
    str1 += "爱玩游戏";
    cout << "str1 = " << str1 << endl;
    str1 += ":";
    cout << "str1 = " << str1 << endl;
    string str2 = "LOL DNF";
    str1 += str2;
    cout << "str1 = " << str1 << endl;
 
    string str3 = "I";
    str3.assign(" love ");
    cout << "str3 = " << str3 << endl;
 
    str3.append("game abcde", 5);
    cout << "str3 = " << str3 << endl;
 
    // str3.append(str2);
    str3.append(str2, 0, 3);
    cout << "str3 = " << str3 << endl;
 
};
 
//字符串查找
void test04() {
    string str = "abcdefgde";
    // 从左往右查
    int pos = str.find("de");
    cout << "pos = " << pos << endl;
    //从右往左查
    pos = str.rfind("de");
    cout << "rfind pos = " << pos << endl;
};
 
//字符串替换
void test05() {
    string str1 = "abcdefg";
    //从1位置起2个字符,替换为"1231231"
    str1.replace(1, 2, "1231231");
    // str1=a1231231defg
    cout << "str1=" << str1 << endl;
};
 
//字符串比较
// = 返回 0
// > 返回 1
//< 返回 -1
void test06() {
    string str1 = "aello";
    string str2 = "hello";
    if (str1.compare(str2) == 0) {
        cout << "str1等于str2" << endl;
    } else if (str1.compare(str2) > 0) {
        cout << "str1大于str2" << endl;
    } else {
        cout << "str1小于str2" << endl;
    }
};
 
    //string 字符存取
    void test07() {
        string str = "hello";
        // cout << "str=" << str << endl;
        //1、通过[]访问单个字符
        for (int i = 0; i < str.size(); ++i) {
            cout << str[i] << " ";
        }
        cout << endl;
        //2、通过at方法访问单个字符
        for (int i = 0; i < str.size(); ++i) {
            cout << str.at(i) << " ";
        }
        cout << endl;
        //修改单个字符
        str[0] = 'x';
        str.at(1) = 'x';
        // xxllo
        cout << "str=" << str << endl;
    }
/*
 * string& insert(int pos, const char* s);//插入字符串
string& insert(int pos, const string& str);//插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n个字符
string& erase(int pos, int n = npos);//删除从Pos开始的n个字符
 */
//字符串的插入和删除
void test08() {
    string str = "hello";
//     插入
    str.insert(1, "111");
    // h111ello
    cout << str << endl;
    //hello
    str.erase(1, 3);
    cout << str << endl;
}
 
//string子串
void test09() {
    string str = "abcdef";
    string subStr = str.substr(1, 3);
    // subStr=bcd
    cout << "subStr=" << subStr << endl;
 
    string email = "zhangsan@sina.com";
    //从邮件地址中获取用户名信息
    int pos = email.find("@");
    cout<<pos<<endl;
    string userName = email.substr(0, pos);
    cout << userName << endl;
}
 
int main() {
    // test01();
    // test02();
    // test03();
    // test04();
    // test05();
    // test06();
    // test07();
    // test08();
    test09();
    system("pause");
    return 0;
}
 
subStr=bcd
8
zhangsan

相关文章
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
11月前
|
对象存储 C++ 容器
c++的string一键介绍
这篇文章旨在帮助读者回忆如何使用string,并提醒注意事项。它不是一篇详细的功能介绍,而是一篇润色文章。先展示重载函数,如果该函数一笔不可带过,就先展示英文原档(附带翻译),最后展示代码实现与举例可以直接去看英文文档,也可以看本篇文章,但是更建议去看英文原档。那么废话少说直接开始进行挨个介绍。
211 3
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
901 6
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
551 6
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
646 6
|
7月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
431 5
|
11月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
260 0
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
367 11