• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

必会的C++字符串操作使用 find_first_not_of 拆分数值和单位

武飞扬头像
鲁班代师
帮助1

一、背景

这里我们需要拆分一个 wstring 类型的字符串,比如 22.33mm ,我们需要将前面的数值部分 22.33 与单位部分 mm 拆开,分别存储。

二、方法:使用

1. find_last_not_of

find_last_not_of函数来查找字符串中最后一个不匹配指定字符集的位置。

具体解释如下:

  1. find_last_not_of函数是std::wstring类的成员函数,用于在字符串中从后往前查找第一个不在指定字符集内的字符
  2. 函数的参数是一个表示字符集的字符串。我们可以传递了L"0123456789."作为参数,表示数字和点号。这意味着函数将查找最后一个不是数字和点号的字符。
  3. find_last_not_of函数返回一个位置索引,指示找到的字符在字符串中的位置。如果找不到匹配的字符,函数将返回std::wstring::npos

2. find_first_not_of

find_first_not_of函数是C 的字符串查找函数,用于从字符串的起始位置开始查找第一个不在指定字符集内的字符。下面是find_first_not_of函数的用法:

size_t find_first_not_of(const std::wstring& str, size_t pos = 0);

参数说明:

  • str:要在其中查找的字符串。
  • pos:要开始查找的位置,默认为0,即从字符串的起始位置开始查找。

返回值:

  • 如果找到了第一个不在指定字符集内的字符,则返回该字符在字符串中的位置索引。
  • 如果没有找到不在指定字符集内的字符,则返回std::wstring::npos

所以我们可以使用 find_first_not_of 函数用于查找单位部分的起始位置。通过找到第一个不是数字和点号的字符,我们可以确定单位部分的开始位置,并从该位置开始提取单位部分,该位置之前就是数值部分。

具体代码如下所示:

#include <iostream>
#include <string>

int main() {
    std::wstring input = L"22.33mm";

    // 查找单位部分的起始位置
    size_t unitPos = input.find_first_not_of(L"0123456789.");

    // 提取数值部分和单位部分
    std::wstring numberPart = input.substr(0, unitPos);
    std::wstring unitPart = input.substr(unitPos);

    // 输出结果
    std::wcout << L"数值部分: " << numberPart << std::endl;
    std::wcout << L"单位部分: " << unitPart << std::endl;

    return 0;
}

这样就可以成功拆分出数值部分: 22.33 和 单位部分: mm 。

其中substr() 是用于从一个字符串中提取子字符串的函数。

substr() 函数有两个版本:

  1. 使用两个参数的版本:substr(pos, len),其中 pos 是起始位置,len 是要提取的子字符串长度。返回从 pos 开始的长度为 len 的子字符串。上面的 std::wstring numberPart = input.substr(0, unitPos);就是提取 input("22.33mm");中从0开始长度为unitPos的字符串,因为下标从0开始,所以所以mm的第一个m的位置unitPos,刚好就是前面22.33的长度。
  2. 使用一个参数的版本:substr(pos),其中 pos 是起始位置。返回从 pos 开始一直到字符串末尾的子字符串。这里提取单位的操作 input.substr(unitPos); 就是提取从mm的第一个m的位置unitPos到字符串末尾的子字符串。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgiifhg
系列文章
更多 icon
同类精品
更多 icon
继续加载