字符串经典题之参数解析

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地址

动态规划经典题之编辑距离

iOS经典面试题之深入解析分类Category的本质以及如何被加载

C++经典面试题之深入解析const修饰指针的作用

猿创征文|iOS经典面试题之深入解析分类Category的本质以及如何被加载