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