儿童玩具网站建设策划书,企业电子商务网站建设设计目的,济南自助建站系统,网站建设上海公司(꒪ꇴ꒪ )#xff0c;Hello我是祐言QAQ我的博客主页#xff1a;C/C语言#xff0c;数据结构#xff0c;Linux基础#xff0c;ARM开发板#xff0c;网络编程等领域UP#x1f30d;快上#x1f698;#xff0c;一起学习#xff0c;让我们成为一个强大的攻城狮#xff0…(꒪ꇴ꒪ )Hello我是祐言QAQ我的博客主页C/C语言数据结构Linux基础ARM开发板网络编程等领域UP快上一起学习让我们成为一个强大的攻城狮送给自己和读者的一句鸡汤集中起来的意志可以击穿顽石!作者水平很有限如果发现错误请在评论区指正感谢 在C中字符串处理是非常重要的一部分而string类是STL中封装的一个重要工具用于处理字符串。它的强大功能在上上篇博客中有些许讲解那么本文将介绍C中字符串的基本概念以及string类的构造方法让你彻底理解和掌握C中的string类。 一. C中字符串的概念 在C中字符串是文本数据的重要形式用于存储和处理文本信息。C中有多种方式来表示字符串其中最常用的是使用string类。掌握好string类对新手是及其重要的。
1.1 string类 string是C标准模板库STL中封装的一个类用于表示和操作字符串。它是对字符数组char数组或字符指针char *的封装提供了一系列的成员函数后文马上也会介绍到详细的常见成员用法等简化了字符串的操作。
1.2 string类的优势 与传统的字符数组或字符指针相比string类有以下优势 内存管理string类会自动管理字符串的内存不需要手动释放内存或担心内存越界问题。 操作简便string类提供了丰富的成员函数使得字符串的操作变得更加简单和灵活。 安全性由于内存管理由string类自动处理可以减少许多常见的内存错误。
1.3 输入字符串 需要注意的是如果使用 cin 来输入字符串它会在遇到空格时停止输入。如果需要获取包含空格的输入应使用getline函数如下所示
string name;
getline(cin, name); // 通过getline获取包含空格的输入getline函数的具体用法呢上一篇博客中也有详细介绍感兴趣请翻阅查看。
二. string字符串的构造 现在让我们来看一下如何构造string字符串。
2.1 默认无参构造函数 string类具有默认无参构造函数可以用来创建一个空的字符串对象如下所示
string str; // 创建一个空的字符串对象2.2 有参构造函数 string类也提供了有参构造函数用于根据给定的内容创建字符串对象。以下是一些示例
使用字符串字面值创建字符串对象
string str1(hello world); // 使用字符串字面值创建字符串对象
string str2 hello world; // 另一种方式使用字符和重复次数创建字符串对象
string str3(10, A); // 创建包含10个A字符的字符串2.3 拷贝构造函数 string类还具有拷贝构造函数可以通过复制已有的字符串对象来创建新的字符串对象如下所示
string str4 str1; // 使用拷贝构造函数创建新的字符串对象
string str5(str2); // 另一种使用拷贝构造函数的方式三. 重载运算符 学习C语言时大家肯定对重载没有太多印象如果你能记起 是被重载的那么你的C语言是扎实的它既可以是按位与操作符又是取地址操作符那么在C中string类重载了许多操作符使得字符串的操作更加方便和灵活。下面我们将介绍一些常见的操作符重载函数。 3.1 赋值运算符 赋值运算符被重载用于将一个字符串赋值给另一个字符串。例如
string str1 hello world; // 使用赋值运算符将一个字符串赋值给str1
string str2;
str6 str1; // 使用赋值运算符将str4的值赋给str2
cout str2 str2 endl;3.2 左移运算符 左移运算符被重载用于将字符串输出到输出流通常用于输出到控制台。例如
string str1 hello world;
cout str1 str1 endl; // 使用左移运算符将str1输出到控制台3.3 右移运算符 右移运算符被重载用于从输入流中读取字符串。例如
string str1;
cin str1; // 使用右移运算符从输入流中读取字符串3.4 数组下标操作符[] 数组下标操作符[]被重载使得可以通过下标访问字符串中的字符。例如
string str1 hello world;
char c str1[2]; // 使用数组下标操作符访问字符串的第三个字符下标从0开始
cout c c endl; // 输出 c l3.5 加法运算符 加法运算符被重载用于将两个字符串连接起来。例如
string str1 hello ;
string str2 world;
string str3;
str3 str1 str2; // 使用加法运算符连接两个字符串3.6 加法赋值运算符 加法赋值运算符被重载用于将一个字符串与另一个字符串连接并将结果赋值给原字符串。例如
string str1 hello ;
string str2 world;
str1 str2; // 使用加法赋值运算符连接并赋值3.7 关系运算符、!、、、、 关系运算符、!、、、、被重载用于比较两个字符串的大小关系。例如
string str1 apple;
string str2 banana;
if (str1 str2) {cout str1 小于 str2 endl;
} else {cout str1 大于等于 str2 endl;
}注意 只要你的类(stig字符串)里面只要对运算符有做重载你都可以直接去用这个运算符如果没有则会报以下这个错误
no match for‘operator|’ //operator是关键表示后面的这个运算符没有做重载 四、C的string成员函数 之前的一篇博客已经详细的讲解了string类强大的功能那么今天我们来看看该类下到底有多少常用的成员函数用于操作和处理字符串。
4.1 length()或size() 返回字符串的长度即字符的个数。
string str hello;
int len str.length();// 或 int len str.size();4.2 empty() 检查字符串是否为空返回true表示为空false表示非空。
string str hello;
bool isEmpty str.empty(); // 返回 false4.3 clear() 清空字符串的内容使其成为空字符串。
string str hello;
str.clear(); // str现在是一个空字符串4.4 substr(start, length) 返回从指定位置开始的指定长度的子字符串。
string str hello world;
string sub str.substr(6, 5); // sub world4.5 find(substring) 在字符串中查找子字符串并返回第一次出现的位置索引如果未找到则返回string::npos。
string str hello world;
size_t pos str.find(world); // pos 64.6 replace(start, length, new_str) 用新字符串替换指定位置的子字符串。
string str hello world;
str.replace(6, 5, there); // str hello there4.7 append(new_str)或 将新字符串追加到原字符串的末尾。
string str hello;
str.append( world); // str hello world
// 或者
string str1 hello;
string str2 world;
str1 str2; // str1 hello world4.8 insert(pos, new_str) 在指定位置插入新字符串。
string str hello;
str.insert(3, there); // str hello there4.9 erase(start, length) 删除指定位置的一段字符。
string str hello world;
str.erase(6, 5); // str hello 4.10 compare(str2) 与另一个字符串比较返回0表示相等正数表示大于负数表示小于。
string str1 apple;
string str2 banana;
int result str1.compare(str2); // result 0因为apple小于banana4.11 at 获取字符串的单个字符。
string str1(hello);
string str2(world);
char cstr1.at(4); //获取下标为4的这个字符
cout c c endl;
str2.at(0)h; //更改第0个字符为h
cout str2 str2 endl;
4.12 assign 字符串的赋值。
string str1(hello world);
string str2;
str2.assign(str1);
cout str2 str2 endl;string str3;
str3.assign(str1,0,5); //从0开始赋值5个
cout str3 str3 endl; 4.13 swap 字符串的交换。
string str1(hello);
string str2(world);
cout str1 str1 endl;
cout str2 str2 endl;
str1.swap(str2);
cout str1 str1 endl;
cout str2 str2 endl;
练习1将字符串中所有的小写字母和大写字母颠倒并输出。 #include iostream
using namespace std;int main() {string str(Hello WorLD);// 遍历字符串中的每个字符for (int i 0; i str.length(); i) {// 如果字符是大写字母将其转换为小写字母if (str[i] A str[i] Z) {str[i] 32;}// 如果字符是小写字母将其转换为大写字母else if (str[i] a str[i] z) {str[i] - 32;}}cout str endl;return 0;
}练习2编写一个程序去掉给定字符串中重复的字符比如goooooogle gole。 #include iostream
using namespace std;int main() {string str;cin str; // 从输入获取字符串例如输入gooooogle// 遍历字符串中的每个字符for (int i 0; i str.length(); i) {// 再次遍历字符串中的字符从当前字符的下一个位置开始for (int j i 1; j str.length(); ) {// 如果当前字符与后面的字符相同就删除后面的字符if (str[i] str[j]) {str.erase(j, 1); // 删除重复字符假设删除字符的后一个还是这个字符} else {j;}}}cout str endl; // 输出移除重复字符后的字符串return 0;
}更多C/C语言、Linux系统、数据结构和ARM板实战相关文章关注专栏 手撕C语言 玩转linux 脚踢数据结构 系统、网络编程 探索C 6818ARM开发板实战
写在最后
今天的分享就到这啦~觉得博主写的还不错的烦劳 一键三连喔~感谢关注