C++解析字符串获取参数

2023-11-11

文章目录

1.功能说明

一些软件在运行时,需要一些命令。这里使用通过字符串的方式,来获取软件启动需要的一些参数。

比如:-name1 aaa -name2 bbb
有这样一个字符串,通过解析-name1对应的aaa,-name2对应的bbb;

2.代码

// ConsoleApplication3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
using namespace std;

void GetCanShu(std::string strcmd);
std::string GetSegment(std::string phrase, std::string cmdline);
std::string Left(std::string srcStr, int pos);
std::string Right(std::string srcStr, int pos);
std::string Mid(std::string srcStr, int pos, int len);
std::string TrimLeft(std::string srcStr, const std::string& phrase);
std::string TrimRight(std::string srcStr, const std::string& phrase);
int main()
{

    std::string TestStrCmd = "-name1 aaa -name2 bbb";
    GetCanShu(TestStrCmd);

}

void GetCanShu(std::string strcmd)
{
    std::string sName1 = GetSegment("-name1", strcmd);//
    std::string sName2 = GetSegment("-name2", strcmd);//
    std::cout << sName1 << endl;
    std::cout << sName2 << endl;
}


std::string GetSegment(std::string phrase, std::string cmdline)
{
    std::string str;
    int phrasePos = cmdline.find(phrase, 0);
    if (phrasePos < 0)
    {
        return str;
    }
    int pos = cmdline.find("-", phrasePos + 1);
    if (pos < 0)
    {
        str = Right(cmdline, cmdline.length() - phrasePos);
    }
    else
    {
        str = Mid(cmdline, phrasePos, pos - phrasePos);
    }
    str = TrimLeft(str, phrase);
    str = TrimLeft(str, " ");
    str = TrimLeft(str, "\"");
    str = TrimRight(str, " ");
    str = TrimRight(str, " \"");
    return str;
}
std::string Left(std::string srcStr, int pos)
{
    std::string str;
    if (0 == srcStr.length() || pos < 0)
    {
        return srcStr;
    }

    int i = 0;
    for (; i < pos; i++)
    {
        str += srcStr[i];
    }
    return str;
}
std::string Right(std::string srcStr, int pos)
{
    std::string str;
    if (0 == srcStr.length() || pos < 0)
    {
        return srcStr;
    }
    int i = pos;
    for (; i < srcStr.length(); i++)
    {
        str += srcStr[i];
    }
    return str;
}

std::string Mid(std::string srcStr, int pos, int len)
{
    std::string str;
    if (0 == srcStr.length() || pos < 0 || len < 0)
    {
        return srcStr;
    }
    int i = pos;
    for (; i < (pos + len); i++)
    {
        str += srcStr[i];
    }
    return str;
}
std::string TrimLeft(std::string srcStr, const std::string& phrase)
{
    std::string str;
    std::string::size_type pos = srcStr.find(phrase, 0);
    if (pos == std::string::npos)
    {
        return srcStr;
    }
    str = Right(srcStr, pos + phrase.length());
    return str;
}

std::string TrimRight(std::string srcStr, const std::string& phrase)
{
    std::string str;
    std::string::size_type pos = srcStr.find(phrase, 0);
    if (pos == std::string::npos)
    {
        return srcStr;
    }
    str = Left(srcStr, srcStr.length() - phrase.length());
    return str;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++解析字符串获取参数 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • crc16 ccitt的详细标准及其出处

    CRC16 CCITT是一个16位的循环冗余校验 CRC 算法 它是由国际电报电话咨询委员会 CCITT 制定的 该算法被广泛用于通信领域 以验证数据传输的完整性 以下是CRC16 CCITT算法的详细标准 多项式生成器 Polynomia
  • weblogic wls-wsat组件远程命令执行(CVE-2017-3506)

    所有文章 仅供安全研究与学习之用 后果自负 weblogic wls wsat组件远程命令执行 CVE 2017 3506 前言 与weblogic 反序列化 CVE 2017 10271 类似 一般情况下weblogic会开放7001以及
  • (port is already in use)端口被占用问题

    前言 端口占用问题几乎每个开发人员都会遇到 每次用每次查 下面来记录下解决过程 以便日后需要 正文 1 调出命令窗口 windows R 组合键 调出命令窗口 2 查找占用端口对应的PID 进程号 说明 以下举例用到的端口和进程等仅做参考
  • Cadence Allegro PCB快捷键设置

    1 通过env文件设置快捷键 在安装路径下D Cadence SPB 16 6 share pcb text中找到env文件 利用记事本打开 就可以加入自己的快捷键方式了 二 env文件在哪里 以我的电脑为例 在安装路径下D cadence
  • 实现点击图片放大查看功能

    1 html 代码 div style display none text align center width 100 height 100 background color none img style height 1 width 4
  • unity物体自身轴旋转_unity3d如何实现物体自动旋转-unity3d物体自动旋转的设置教程 - 河东软件园...

    unity3d是我们设计师用来制作游戏画面的软件 很多的手机App也可以使用它来制作 有的时候我们在游戏中能够看见一些人物或是物体的移动效果 例如平移 旋转等等都可以轻松的利用这款软件来实现 今天小编想和大家分享一下如何在unity3d中使
  • 2020-08-13

    https www cnblogs com daizhengyang p 13384169 html https blog csdn net qq 27289001 article details 77150598 https www cn
  • oracle学习之rownum和rowid

    rownum先百度一波https www cnblogs com xfeiyun p 16355165 html rownum是oracle特有的一个关键字 对于基表 在insert记录时 oracle就按照insert的顺序 将rownu
  • 编程的未来

    从 ChatGPT 诞生至今 在程序员的圈子里 我们一直有两种讨论 最开始所恐慌的 编程没有未来 ChatGPT 是不是要取代程序员 编程的方式前所未有地发生了变化 现如今 GitHub Copilot Chat 可以让开发者们直接在编辑器
  • 使用python分析数据分布

    要使用 Python 分析数据分布 你可以使用 Python 中的数据可视化库 如 matplotlib 或 seaborn 例如 你可以使用 matplotlib 的 hist 函数绘制数据的直方图 以查看数据的分布情况 你也可以使用 s
  • redis-cli报错Could not connect to Redis at 127.0.0.1:6379: Connection refused

    新手安装完redis后想要使用redis cli连接但是报错 为什么会报这个错呢 首先启动redis server 看能否启动 启动命令式 redis server 然后 1如果修改了IP地址 比如说改成了192 168 66 66 那么执
  • 中移物联ML302 4G Cat1 模组TCP/UDP 实现流程

    中移物联ML302 4G Cat1 模组TCP UDP 实现流程 注意 下文种的 表示 r n 一 首先AT 00 57 34 794 发 AT 00 57 35 756 发 AT 00 57 35 760 收 AT OK 二 查询卡CIM
  • 并发策略之分工原则

    本文主要思想来自 Java虚拟机并发编程 薛笛 译 为什么要用并发 并发是再在有限的资源下提高性能的有效手段 当然现在互联网环境下并发访问的现象也比比皆是 但是本文并不涉及处理并发访问 而是使用并发手段解决复杂任务的策略 另外关于并发和并行
  • 算法——排序——归并排序图解动画

    归并排序 简介 代码示例 排序过程 分解 合并 时间复杂度 空间复杂度 稳定性 简介 归并排序分为两部分 分解 合并 分解 归并算法会把数组分成两个长度相同的子数组 直到无法再分割 每个数组只有一个元素 此过程不消耗时间资源 对应的时间复杂
  • 03 Java_数据类型&变量&运算符

    第二章 数据类型 变量和运算符 double string character integer scanner score name boolean true false Java常用的数据类型 Java语言提供了八种基本类型 六种数字类型
  • activemq的clientId

    这个id如果不设置的话 那么会以电脑主机以及毫秒值加上随机数值来确认 比如 DESKTOP ST4H4BI 61938 1593840777757 0 1 但是也可以设置 但是要注意 activemq不允许多个客户的地址相同且clientI
  • python与数据挖掘 上机实验_python数据挖掘实验报告1

    python数据挖掘实验报告1 python数据挖掘实验报告1 实验内容及步骤 包含简要的实验步骤流程 1 使用Pandas datareader获取任意两支股票近三个月的交易数据 做出收盘价的变动图像 2 使用Pandas datarea
  • 【Paddle NLP入门打卡】实践课1:词向量应用演示 学习笔记

    文章目录 1 下载配置Embedding 2 认识Embedding 3 将词向量映射到低维空间 4 基于TokenEmbedding的词袋模型 5 构造Tokenizer 5 2 查看相似语句相关度 6 使用可视化VisualDL查看句子
  • Java垃圾回收机制、性能优化

    前言 Android开发中经常会遇见应用内存不断增加 或者在处理不当的情况下 造成内存泄漏 严重会导致OOM 但是Java有自动垃圾回收机制 为什么还会造成这种情况呢 那我们通过new关键字创建出来的对象 开启的Activity在什么情况下
  • C++解析字符串获取参数

    文章目录 1 功能说明 2 代码 1 功能说明 一些软件在运行时 需要一些命令 这里使用通过字符串的方式 来获取软件启动需要的一些参数 比如 name1 aaa name2 bbb 有这样一个字符串 通过解析 name1对应的aaa nam