C++小白求助!

qq_45797392 2020-06-03 09:01:39
本人C++小白,初学STL,请问下面这道题怎么做?做好能附上完整代码,感激不尽!
给定一个string,转换为另一个string。每条规则由两部分组成:一个可能出现在输入文件中的单词和一个用来替换它的短语。表达的含义是,每当第一个单词出现在输入中,我们就将他替换为对应的短语。
单词转换文件规则如下:
brb ---> be right back
k ---> okey?
y ---> why
r ---> are
u ---> you
pic ---> picture
thk ---> thanks!
18r ---> later
希望转换的内容为:
where r u
y dont u send me a pic
k thk 18r
注 :要求使用map完成该题。
...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-08
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
qq363960630 2020-08-26
  • 打赏
  • 举报
回复
结帖啊,给分啊
Simple-Soft 2020-06-03
  • 打赏
  • 举报
回复
用map把要替换的和替换后的关系建立起来,然后从文件中读出来,关键字进行替换
qq363960630 2020-06-03
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string>
#include <map>
#include <iostream>
#include <vector>

static const char* arr[][2] = {
	{"brb", "be right back"},
	{"k", "okey?"},
	{"y", "why"},
	{"r", "are"},
	{"u", "you"},
	{"pic", "picture"},
	{"thk", "thanks!"},
	{"18r", "later"},
};

int split(const std::string& src, const std::string &pattern, std::vector<std::string>& vct) {
	if (src.empty()) {
		return 0;
	}

	int start = 0;
	int idx = src.find_first_of(pattern, start);

	while (idx != std::string::npos) {
		if (start != idx) {
			std::string tmp = src.substr(start, (idx - start));
			vct.push_back(tmp);
		}

		start = idx + 1;
		idx = src.find_first_of(pattern, start);
	}

	if (!src.substr(start).empty()) {
		vct.push_back(src.substr(start));
	}

	return 0;
}

int main()
{
	std::string strSrc = "where r u y dont u send me a pic k thk 18r";
	std::map<std::string, std::string> mapping;
	int size = sizeof(arr) / sizeof(*arr);

	for (int i = 0; i < size; i++) {
		mapping.insert(std::make_pair(arr[i][0], arr[i][1]));
	}

	std::vector<std::string> words;
	split(strSrc, " ", words);

	std::string result = "";
	for (int i = 0; i < words.size(); i++) {
		std::string& tmp = words[i];

		std::map<std::string, std::string>::iterator it = mapping.find(tmp);
		if (it != mapping.end()) {
			tmp = it->second;
		}

		result += tmp;
		if (i != (words.size() - 1)) {
			result += " ";
		}
	}

	std::cout << result;

	return 0;
}

64,671

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧