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

C++入门自学Day7-- String类的使用(续)

 往期内容回顾

        String类(续)

        String类(初识)

string类的操作(续)

        string 类的一些常用操作函数的详细讲解,包含功能、语法以及示例代码,帮助你深入理解每个函数的用途。

        1、c_str()

功能:

        返回一个指向以 null 结尾的 C 风格字符串的指针(const char*),用于兼容 C 函数(如 printf, strlen, strcpy等)。

const char* c_str() const noexcept;

std::string str = "Hello";
printf("%s\n", str.c_str());  // 输出: Hello
int main(){string s("Hello world!\n");const char* ps = s.c_str();// printf("%s\n",ps);while(*ps){cout<< *ps << ' ';ps++;}cout << endl;cout << s << endl; //调用string类<<的重载cout << s.c_str()<<endl;//直接输出const char*;
}

输出:

H e l l o   w o r l d ! 
 
Hello world!

Hello world!


int main(){string s("Hello world!\n");s += '\0';s += "world";cout << s << endl;cout << s.c_str()<<endl;
}

输出描述:

Hello world!
world
Hello world!

cout << s << endl;

Hello world!\nworld!

std::cout 打印整个 string,包括中间的 '\0'

cout << s.c_str()

Hello world!\n

c_str() 返回的 C 字符串只到第一个 '\0'

注意:

  • s.c_str() 仍然只返回从头开始到第一个 '\0' 的部分,即 "Hello world!\n"。


2、利用find() 和 substr()寻找子字符串

🔍 函数简介

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

  • 在调用字符串中查找 str 从 pos 开始出现的位置。

  • 如果找不到,返回 string::npos。

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

  • 从字符串的 pos 位置开始,截取长度为 len 的子串。

函数示例
int main(){string s("hello.cpp");size_t pos = s.find('.');if(pos != string::npos){string s2 = s.substr(pos);cout<< s2 <<endl;}else{cout<< "There is no suffix!"<<endl;}
}

输出描述:

.cpp


利用find和substr分离网址

        url = "https://cplusplus.com/reference/string/string/?kw=string#google_vignette"

每个网址都由三部分构成:1、协议 2、域名  3、资源名称

比如上面那个url就可以分离成下面三个:

协议: https        域名: cplusplus.com  

 资源名称 reference/string/string/?kw=string#google_vignette

利用find的代码实现:

void split_url(const string& str){size_t pos1 = str.find(':');if(pos1 != string::npos){cout<<str.substr(0,pos1)<<endl;}else{cout<<"wrong url"<<endl;}size_t pos2 = str.find('/',pos1+3);if(pos2 != string::npos){cout<<str.substr(pos1+3,pos2-pos1-3)<<endl;}else{cout<<"wrong url"<<endl;}cout<<str.substr(pos2)<<endl;
};int main(){string s("https://cplusplus.com/reference/string/string/?kw=string#google_vignette");split_url(s);
}

3、copy()

        功能:

将字符串的一部分拷贝到字符数组中,不添加 \0 结尾!

size_t copy(char* s, size_t len, size_t pos = 0) const;

示例:
std::string str = "Hello, World!";
char buffer[6];
str.copy(buffer, 5, 7);  // 从位置7拷贝5个字符到buffer
buffer[5] = '\0';        // 手动添加结尾符
std::cout << buffer;     // 输出: World

3、rfind()

        功能:

查找字符串中最后一次出现的位置。

示例:

std::string str = "abcdefgabc";
std::cout << str.rfind("abc");  // 输出 7

4、compare()

功能:

比较字符串内容,返回值:

  • 0 表示相等

  • >0表示当前参数字符串小

  • <0 表示参数字符串大

std::string a = "abc", b = "abd";
if (a.compare(b) < 0)std::cout << "a < b";

【面试oj题】

字符串最后一个单词的长度

        对于给定的若干个单词组成的句子,每个单词均由大小写字母混合构成,单词间使用单个空格分隔。输出最后一个单词的长度。

输入描述:

在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。
除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过 103103 。

输出描述:

在一行上输出一个整数,代表最后一个单词的长度。

代码实现:

#include <iostream>
using namespace std;size_t get_length(const string& str) {size_t pos =  str.rfind(' ');if (pos != 0) {return str.size() - pos - 1;} else {return str.size();}
}int main(){string s;// cin>>s;getline(cin,s);cout<<get_length(s)<<endl;return 0;
}

小结:这些函数的分类记忆

功能

函数名

字符串获取

c_str(), data()

拷贝

copy()

查找

find(), rfind(), find_first_of(), find_last_of(), find_first_not_of(), find_last_not_of()

子串

substr()

比较

compare()

http://www.dtcms.com/a/318815.html

相关文章:

  • windows_exporter-0.13.0-amd64.exe 怎么安装?Windows服务安装与运行方法
  • 中国341个城市人力需求指数数据集
  • 【MATLAB】(十)符号运算
  • 一文读懂 C# 中的 Bitmap
  • 知识随记-----Qt 实用技巧:自定义倒计时按钮防止用户频繁点击
  • 3D 软件在游戏开发中的全链路应用:从原型到上线的实战解析
  • Docker Buildx最佳实践:多架构镜像构建指南
  • Mac/Windows跨平台PDF与AI高效解决方案
  • sigprocmask 函数深度解析
  • html页面使用jspdf预览及下载pdf模板
  • 使用驱动移除内核回调,
  • golang开源库之Syncthing
  • Unity URP渲染管线动态修改材质球状态
  • 基于 HT 引擎实现 3D 智慧物流转运中心一体化管控系统
  • 【CS创世SD NAND征文】小型夜灯为何需要存储芯片?从基础照明到智能存储的升级密码
  • 生成式AI时代,Data+AI下一代数智平台建设指南
  • EP04:【DL 第二弹】张量的线性代数运算
  • 内网穿透原理和部署教程
  • 京东关键字搜索商品列表接口开发实战:从参数优化到分布式调用
  • localforage的数据仓库、实例、storeName和name的概念和区别
  • VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
  • mysql全屏终端全量、部分备份、恢复脚本
  • 累加和校验原理与FPGA实现
  • 躺平发育小游戏微信抖音流量主小程序开源
  • 自建纯竞拍系统小程序需准备的事项
  • uniapp/uniappx实现图片或视频文件选择时同步告知权限申请目的解决华为等应用市场上架审核问题
  • TSMaster-C小程序使用
  • uni-app X能成为下一个Flutter吗?
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中实现业务逻辑层??