目录
基本语法
示例代码
常见用法和注意事项
✅ 正确使用方式
❌ 常见错误
实用技巧:获取文件扩展名
分割字符串(简单示例)
首页 后端开发 C++ C字符串subtr示例

C字符串subtr示例

Aug 11, 2025 pm 04:30 PM
c++ string

std::string 的 substr() 函数用于提取子字符串,1. pos 为起始索引(从 0 开始),len 为字符个数(可选,默认到末尾);2. 若 pos 等于字符串长度,返回空字符串;3. 若 pos 超出长度,抛出 std::out_of_range 异常;4. len 超过剩余字符时自动截断;5. 使用 size_t 类型,避免负数索引。示例包括提取固定长度子串、获取文件扩展名和分割路径文件名,使用时需确保 pos 有效以防止异常。

C   string substr example

在 C 中,std::stringsubstr() 函数用于从字符串中提取子字符串。它是一个非常常用的操作,语法简单,使用方便。

C   string substr example

基本语法

string substr(size_t pos = 0, size_t len = npos) const;
  • pos:起始位置(索引,从 0 开始)
  • len:要提取的字符个数(可选,默认到字符串末尾)

返回一个新的字符串,包含从 pos 开始、最多 len 个字符的子串。


示例代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str = "Hello, World!";

    // 1. 从位置 7 开始,提取 5 个字符
    string sub1 = str.substr(7, 5);
    cout << "sub1: " << sub1 << endl;  // 输出: World

    // 2. 从位置 0 开始,提取前 5 个字符
    string sub2 = str.substr(0, 5);
    cout << "sub2: " << sub2 << endl;  // 输出: Hello

    // 3. 从位置 7 开始,提取到末尾(省略 len)
    string sub3 = str.substr(7);
    cout << "sub3: " << sub3 << endl;  // 输出: World!

    // 4. 提取整个字符串
    string sub4 = str.substr();
    cout << "sub4: " << sub4 << endl;  // 输出: Hello, World!

    // 5. 起始位置超出长度会抛出 out_of_range 异常
    try {
        string sub5 = str.substr(20);
        cout << "sub5: " << sub5 << endl;
    } catch (const out_of_range& e) {
        cout << "Error: " << e.what() << endl;
    }

    return 0;
}

常见用法和注意事项

✅ 正确使用方式

  • 索引从 0 开始
  • len 可以超过剩余字符数,substr 会自动截取到末尾
  • 如果 pos == str.length(),返回空字符串
  • 如果 pos > str.length(),抛出 std::out_of_range

❌ 常见错误

str.substr(-1, 3);  // 错误!pos 是 size_t 无符号类型,-1 会变成极大值

实用技巧:获取文件扩展名

string filename = "example.txt";
size_t dotPos = filename.rfind('.');
if (dotPos != string::npos) {
    string ext = filename.substr(dotPos   1);
    cout << "Extension: " << ext << endl;  // 输出: txt
}

分割字符串(简单示例)

string path = "/home/user/file.txt";
size_t lastSlash = path.rfind('/');
if (lastSlash != string::npos) {
    string filename = path.substr(lastSlash   1);
    cout << "Filename: " << filename << endl;  // 输出: file.txt
}

基本上就这些。substr() 简单但容易忽略边界问题,使用时注意检查位置是否有效即可。

C   string substr example

以上是C字符串subtr示例的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

计算机中丢失MSVCP71.dll怎样修复 只需三种方法 计算机中丢失MSVCP71.dll怎样修复 只需三种方法 Aug 14, 2025 pm 08:03 PM

电脑提示“计算机中丢失MSVCP71.dll”,通常是因为系统缺少关键运行组件,导致软件无法正常加载。本文将深入解析该文件的功能、报错根源,并提供三种高效解决方案,助你快速恢复程序运行。一、MSVCP71.dll是什么?MSVCP71.dll属于MicrosoftVisualC 2003的核心运行库文件,属于动态链接库(DLL)类型,主要用于支持C 编写的程序调用标准函数、STL模板及基础数据处理模块。许多2000年代初开发的应用程序和经典游戏都依赖此文件运行。一旦该文件缺失或损坏,系

c弦向量示例 c弦向量示例 Aug 21, 2025 am 04:02 AM

std::vector的基本用法包括:1.声明vector;2.使用push_back()添加元素;3.用初始化列表初始化;4.用范围for循环遍历;5.通过索引或back()访问元素;6.直接赋值修改元素;7.用pop_back()删除末尾元素;8.调用size()获取元素数量;操作时推荐使用constauto&避免拷贝,预分配reserve()提升性能,并注意访问前检查非空,该数据结构是处理字符串列表的高效首选方式。

C操作员超载示例 C操作员超载示例 Aug 15, 2025 am 10:18 AM

C 中的运算符重载允许为自定义类型赋予标准运算符新行为,1.通过成员函数重载 返回新对象;2.重载 =修改当前对象并返回引用;3.友元函数重载

如何在C中编写简单的TCP客户端/服务器 如何在C中编写简单的TCP客户端/服务器 Aug 17, 2025 am 01:50 AM

答案是编写一个简单的TCP客户端和服务器需要使用操作系统提供的套接字编程接口,服务器通过创建套接字、绑定地址、监听端口、接受连接、收发数据完成通信,客户端则通过创建套接字、连接服务器、发送请求、接收响应实现交互,示例代码展示了在Linux或macOS上使用Berkeley套接字API的基本实现,包含必要的头文件、端口设置、错误处理和资源释放,编译后先运行服务器再运行客户端可实现双向通信,Windows平台需初始化Winsock库,该示例为阻塞I/O模型,适用于学习基础套接字编程。

C错误的分享示例 C错误的分享示例 Aug 16, 2025 am 10:42 AM

Falsesharing发生在多个线程修改同一缓存行中的不同变量时,导致缓存失效和性能下降;1.使用结构体填充使每个变量独占一个缓存行;2.利用alignas或std::hardware_destructive_interference_size进行内存对齐;3.优先使用线程本地变量最后合并结果,从而避免伪共享,提升多线程程序性能。

如何链接C中的库 如何链接C中的库 Aug 21, 2025 am 08:33 AM

要链接C 中的库,需在编译时使用-L指定库路径,-l指定库名,同时用-I包含头文件路径,确保静态或动态库文件存在且命名正确,必要时通过-Wl,-rpath嵌入运行时库路径,最终使编译器能找到声明、链接器能找到实现,程序即可成功构建并运行。

如何为C项目编写基本的制作费? 如何为C项目编写基本的制作费? Aug 15, 2025 am 11:17 AM

AbasicMakeFileAutomatesc compilationByByDefindingruleswithtargets和commands.2.KeyComponentsIncludeVariablesLikeCXX,CXXFlags,cxxflags,target,srcs,srcs,srcs,srcs,srcs,objstosimplifyConfiguration.3.AptertNrules.3.aptertnrules(compiles)comptiles $ compiles $:%

如何在vscode中为C配置Intellisense 如何在vscode中为C配置Intellisense Aug 16, 2025 am 09:46 AM

要正确配置VSCode中C 的IntelliSense,首先安装Microsoft的C/C 扩展,然后设置编译器路径、包含目录和C 标准,可通过编辑c_cpp_properties.json手动配置或使用compile_commands.json自动获取构建信息,最后重启并验证IntelliSense功能是否正常工作,确保代码补全、语法高亮和错误检测准确无误。

See all articles