字符串经典题之参数解析
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串经典题之参数解析相关的知识,希望对你有一定的参考价值。
题目
参数解析(点击跳转)
这道题并不慢,主要是一些细节得注意。尤其是第三个参数和第四个参数可能会出现引号,所以在大的情况下得把遇到引号和不是引号的情况分开来讨论。我们建立一个临时变量temp,它用来依次分解每个参数,分解完成之后加入到返回结果里面。由于这道题,思路不难,主要是一些细节问题,所以具体操作过程用代码详细注释,这里就不多解释了
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string input;//接受输入
string temp;//临时字符串
vector<string> args;//分解的参数放在这里
getline(cin, input);
size_t i = 0;
while (input[i] != ' ')//首先分解第一个字符,它比较特殊 比如xcopy
{
temp += input[i];//挨个字符给到temp
i++;
}
i++;//i++表示移动到第二个参数的开头
args.push_back(temp);//第一个参数进入
while (i < input.size())
{
temp.clear();//每分解完一个参数,就不把临时字符串清空一下,以便分解下一个字符串
if (input[i] == '\\"')//如果碰见引号
{
i++;//i++表示略过引号
while (input[i] != '\\"')//把引号间的内容依次给到temp
{
if (i >= input.size())//注意防止越界,因为i会++
{
break;
}
temp += input[i];
i++;
}
i += 2;//当遇到另一个引号停止,此时i指向了引号,下一个是空格,因此移动两次,指向下一个参数的开头
args.push_back(temp);//下一个满足条件参数
}
else//如果不是引号,思路和上面才差不多
{
while (input[i] != ' ')
{
if (i >= input.size())
break;
temp += input[i];
i++;
}
i++;
args.push_back(temp);
}
}
cout << args.size() << endl;
for (size_t i = 0; i < args.size(); i++)//依次输入
{
cout << args[i] << endl;
}
return 0;
}
以上是关于字符串经典题之参数解析的主要内容,如果未能解决你的问题,请参考以下文章
iOS经典面试题之深入解析Runtime如何通过selector找到对应的IMP地址
iOS经典面试题之深入解析Runtime如何通过selector寻找对应的IMP地址