敲笨钟ptaC++

substr

string a = "123456";
string sub_a = a.substr(0, 2); // "12"

string sub_a_ = a.substr(2); // "3456"
  • 左闭右开的截取字符串

实现思路

以逗号分割,取出两个字符串。利用substr判断是否以ong结尾,然后使用string流获取每个单词到一个vector中后改变最后三个索引位置的单词为qiao ben zhong.

#include 
#include 
#include 
#include 

using namespace std;

std::string replaceLastThreeWords(std::string input) {
	string result;
	// 统计有几个空格
	int count = 0;
	for (auto s : input) if (s == ' ') count++;
	// 计算出开始替换的空格位置
	int changeLocation = count - 2;
	count = 0;
	for (int i = 0; i < input.size(); i++) {
		if (input[i] == ' ') count++;
		if (count == changeLocation) {
			result = input.substr(0, i + 1);
			result += "qiao ben zhong.";
			return result;
		}
	}
	return "Skipped";

}

bool lastWordEndsWithOng(const std::string& str1, const std::string& str2) {
	if (str1.size() < 3 || str2.size() < 4 || str1.substr(str1.size() - 3) != "ong" || str2.substr(str2.size() - 4) != "ong.")
		return false;
	return true;
}

int main() {
	int n;
	cin >> n;
	cin.ignore(); // 清除换行符
	while (n--) {
		string str;
		getline(cin, str);
		// 以逗号为分割
		size_t slashPos = str.find(',');
		string str1 = str.substr(0, slashPos);
		string str2 = str.substr(slashPos + 1);
		if (!lastWordEndsWithOng(str1, str2)) cout << "Skipped" << endl;
		else cout << replaceLastThreeWords(str) << endl;
	}
}

就是还有两个用例通不过,希望有大佬可以指出

你可能感兴趣的:(刷题总表,c++,算法,开发语言)