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

文章目录

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;
}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在C语言中,可以使用第三方库来读取和处理JSON字符串。其中,最为常用的库就是cJSON。 首先,我们需要引入cJSON库的头文件,并声明一个指向cJSON对象的指针来存储JSON数据: ``` #include <stdio.h> #include <stdlib.h> #include "cJSON.h" int main() { cJSON *json; char *jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; // 读取JSON字符串 json = cJSON_Parse(jsonString); // 判断JSON数据是否有效 if (json == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } // 从JSON对象中获取对应的值 char *name = cJSON_GetObjectItem(json, "name")->valuestring; int age = cJSON_GetObjectItem(json, "age")->valueint; char *city = cJSON_GetObjectItem(json, "city")->valuestring; // 打印读取的结果 printf("Name: %s\n", name); printf("Age: %d\n", age); printf("City: %s\n", city); // 释放内存 cJSON_Delete(json); return 0; } ``` 以上代码中的`jsonString`是待读取的JSON字符串。使用`cJSON_Parse()`函数可以将字符串解析为cJSON对象。如果解析成功,我们可以通过`cJSON_GetObjectItem()`函数来获取JSON对象中各个字段的值,其参数分别为JSON对象和字段名。其中,`cJSON_GetObjectItem()`返回的是一个cJSON对象,我们可以通过不同的函数来获取其值,如`valuestring`用于获取字符串类型的值,`valueint`用于获取整数类型的值。 最后,使用`cJSON_Delete()`函数释放所分配的内存。 该代码运行后,将输出以下结果: ``` Name: John Age: 30 City: New York ``` 这样就完成了对JSON字符串的读取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做个好男人!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值