题解 | #配置文件恢复#

配置文件恢复

http://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	vector<pair<string, string>> instru = { { "reset","" } 
											,{ "reset","board" } 
											,{ "board","add" } 
											,{ "board","delete" } 
											,{ "reboot","backplane" } 
											,{ "backplane","abort" } };
	vector<string> outInsru = { "reset what" ,"board fault" ,"where to add" ,"no board at all" ,"impossible" ,"install first" };


	string s;
	while (getline(cin,s))
	{
		string s1 = "", s2 = "";

			int start = 0;
			while (start < s.size() && s[start] != ' ')//分割字符串
				start++;
			s1 = s.substr(0, start);
			if (start != s.size())s2 = s.substr(start + 1, s.size());

		int count1 = 0, count2 = 0;
		string result;
		for (auto iter=instru.begin();iter!=instru.end();iter++)
		{
			int i1=iter->first.find(s1);
			int i2;
			if (s2 != "") {//判断是否有第二关键字
				i2 = iter->second.find(s2);
			}
			else if(s2==""&&iter->second==""){
				i2 = 0;
			}
			else i2 = -1;
			if (i1 == 0 && i2 == 0)//判断关键字是否唯一
			{
				count1++;
				count2++;
				result = outInsru[iter - instru.begin()];
			}
		}
		if (count1 == 1 && count2 == 1)//判断是否唯一或者是否存在
		{
			cout << result << endl;
		}
		else {
			cout << "unknown command" << endl;
		}
	}
	return 0;
}

全部评论
第27行,应该是这样的吧:s2=s.substr(start+1,s.size()-start);
点赞 回复 分享
发布于 2021-09-08 17:42
理论上来说是s2=s,substr(start+1,s.size()-start()-1);但根据substr函数的特点,超过字符串长度的部分会只拷贝到字符串结尾,所以楼主是对的,你也是对的。
点赞 回复 分享
发布于 2021-09-20 10:55
或者第27行也可以这样写:s.substr(start + 1),第二个形参的默认值就是到字符串的末尾
点赞 回复 分享
发布于 2021-10-01 17:15

相关推荐

冷艳的小师弟在看机会:jd测评乱点直接被挂了,哭死~
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务