当前位置: 首页 > news >正文

string类

string类

string字符串中的某个字符,其数据格式为char;带入作为函数参数时:

1、不改变原来的值,void fun(char a);

2、修改原值,void fun(char& a);

#include <iostream>
using namespace std;
void jiami(char& a){//位移4个的加密方式if(a=='w'||a=='x'||a=='y'||a=='z'||a=='W'||a=='X'||a=='Y'||a=='Z'){a=a-26+4;}elsea=a+4;
}
int main(){int t;cin >> t;while(t--){string s;cin >> s;for(int i=0;i<s.length();i++){if(s[i]<='z'&&s[i]>='a' || s[i]<='Z'&&s[i]>='A'){jiami(s[i]);}else continue;}cout << s << endl;}}

创建:

string str;//生成空字符串string s(str);//对str进行拷贝string s(str, strbegin,strlen);//将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值string s(cstr, char_len);//以C_string类型cstr的前char_len个字符串作为字符串s的初值string s(num ,c);//生成num个c字符的字符串string s(str, stridx);//将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值!!

 拼接:

1、+

//+ 操作符string a("sss");string b("SSS");string c;c = a + b;//自加//a+=b;//a+="aaa";

2、append() 

结尾加上

string s1("abc");
s1.append("def");

比较

在C++中,`std::string` 提供了多种字符串比较的方法,这些方法使得字符串比较非常直观和灵活。以下是C++中常见的字符串比较方式:

1. 使用比较运算符

C++ 的 `std::string` 类重载了比较运算符(`==`、`!=`、`<`、`>`、`<=`、`>=`),使得字符串比较非常方便。

比较内容是否相等(`==` 和 `!=`)

`==` 用于判断两个字符串的内容是否完全相同。

`!=` 用于判断两个字符串的内容是否不同。

string str1 = "hello";
string str2 = "hello";
string str3 = "world";
bool isEqual = (str1 == str2); // true
bool isNotEqual = (str1 != str3); // true
按字典顺序比较(`<`、`>`、`<=`、`>=`)

这些运算符会按照字典顺序比较两个字符串,比较的是字符串中字符的ASCII值。

string str1 = "apple";
string str2 = "banana";bool isLess = (str1 < str2); // true
bool isGreater = (str1 > str2); // false
bool isLessOrEqual = (str1 <= str2); // true
bool isGreaterOrEqual = (str1 >= str2); // false

 2. 使用 `compare()` 方法、

std::string提供了 `compare()` 方法,用于更复杂的比较操作。`compare()` 方法可以比较两个字符串的子串,并且可以指定比较的起始位置和长度。

用法
 `compare(const std::string& str)`:比较整个字符串。

返回值:
        - 如果两个字符串相等,返回0。
        - 如果调用字符串在字典顺序中排在参数字符串之前,返回负整数。
        - 如果调用字符串在字典顺序中排在参数字符串之后,返回正整数。

string str1 = "apple";
string str2 = "banana";int result = str1.compare(str2); // 返回负整数
带参数的比较

`compare(size_t pos1, size_t len1, const std::string& str, size_t pos2, size_t len2)`:比较两个字符串的指定子串。

string str1 = "apple";
string str2 = "applepie";int result = str1.compare(0, 5, str2, 0, 5); // 返回0

总结

- 如果只是简单地比较字符串内容是否相等,可以直接使用 `==` 和 `!=`。
- 如果需要按字典顺序比较,可以使用 `<`、`>`、`<=`、`>=`。
- 如果需要更复杂的比较(如比较子串),可以使用 `compare()` 方法。

 字符串访问

  • operator[]at()

    • operator[]:通过索引访问字符,例如 char c = s[0];,如果索引越界,行为未定义。

    • at():安全地访问字符,如果索引越界,会抛出 std::out_of_range 异常。

  • front()back()

    • front():访问第一个字符。

    • back():访问最后一个字符。

 字符串修改

  • append()+=

    • append():追加字符串,例如 s.append(" world");

    • +=:追加字符串,例如 s += " world";

  • insert()

    • 在指定位置插入字符串,例如 s.insert(0, "Hello ");

  • erase()

    • 删除指定范围的字符,例如 s.erase(0, 5);

  • replace()

    • 替换指定范围的字符,例如 s.replace(0, 5, "Hello");

字符串查找

  • find()

    • 查找子串,返回子串首次出现的位置,如果未找到,返回 std::string::npos

    • 例如:size_t pos = s.find("world");

  • rfind()

    • 从后向前查找子串,返回子串最后一次出现的位置。

  • find_first_of()find_last_of()

    • 查找任意一个字符首次或最后一次出现的位置。

字符串转换

  • c_str()data()

    • c_str():返回C风格的字符串(以null结尾的字符数组)。

    • data():返回字符串的内部数据(C++11后,返回的字符串可能不以null结尾)。

  • size()length()

    • size()length():返回字符串的长度。

  • empty()

    • 检查字符串是否为空。

子串操作

strtok()修改原字符串,在分隔符位置插入\0,并返回分割后的子串。每次调用返回下一个子串,直到没有更多子串。

  • substr()

    • 提取子串,例如 std::string sub = s.substr(0, 5);

  • strtok()

    strtok() 是一个C语言标准库函数,用于分割字符串。它基于分隔符将字符串分割成多个子串。

    函数原型
    char* strtok(char* str, const char* delim);
  • str:要分割的字符串。第一次调用时传入目标字符串,之后传入nullptr

  • delim:分隔符字符串,包含所有用作分隔符的字符。

#include <iostream>
#include <string>int main() {std::string s = "hello world";// 字符串访问std::cout << "First character: " << s[0] << std::endl;std::cout << "Last character: " << s.back() << std::endl;// 字符串修改s.append("!");s.insert(6, "C++ ");s.erase(0, 5);s.replace(0, 3, "CPP");std::cout << "Modified string: " << s << std::endl;// 字符串查找size_t pos = s.find("CPP");if (pos != std::string::npos) {std::cout << "Found 'CPP' at position: " << pos << std::endl;}// 字符串比较std::string s2 = "CPP world!";if (s == s2) {std::cout << "Strings are equal." << std::endl;} else {std::cout << "Strings are not equal." << std::endl;}// 子串操作std::string sub = s.substr(4, 5);std::cout << "Substring: " << sub << std::endl;return 0;
}

string类型的变量,在赋值的时候,如果有空格要输入,不能用cin.getline(,)——因为左值是要char*;

但可以用getline()——c++的函数

template <class _CharT, class _Traits, class _Alloc>
std::basic_istream<_CharT, _Traits>& getline(std::basic_istream<_CharT, _Traits>& __is,std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& __str);

相关文章:

  • JavaScript性能优化实战:深入探讨JavaScript性能瓶颈与优化技巧
  • Apereo CAS
  • Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测
  • React组件基础
  • C#中的依赖注入Dependency Injection, DI
  • JavaSec-专题-反序列化
  • 高效VLM:VisionZip
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • 【计网】SW、GBN、SR、TCP
  • JS 函数柯里化
  • 今日行情明日机会——20250604
  • 前端面试题之call、apply 和 bind
  • 在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
  • 部署SD-WAN与现有网络架构的兼容性分析:如何实现平滑集成与避免设备浪费?
  • 【HarmonyOS 5】生活与服务开发实践详解以及服务卡片案例
  • 《P4799 [CEOI 2015] 世界冰球锦标赛 (Day2)》
  • nndeploy: 易用、高性能、支持多端的AI推理部署框架
  • HDU-2973 YAPTCHA
  • 【大模型:知识图谱】--4.neo4j数据库管理(cypher语法1)
  • Delft3D软件介绍及建模原理和步骤;Delft3D数值模拟溶质运移模型建立;地表水环境影响评价报告编写思路
  • 开个做网站公司/营销推广方案范文
  • 政府网站建设的国际/武汉最新消息今天
  • 织梦做网站简单吗/网站seo优化步骤
  • 做网站点击率怎么收钱/seo顾问咨询
  • 夏天做那个网站致富/北京seo主管
  • 网上找客户渠道/2022年百度seo