【C++】 --题解之查找兄弟单词、乒乓球筐问题、骆驼命名法

1、查找兄弟字符串

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目看懂了吗?那现在我们就可以分析一下,第一次输入的数字是你即将要输入的n个字符串个数;第二步要输入的就是n个字符串;第三步输入的是你想要匹配的字符串;第四步的n就是你找出的兄弟字符串中的第m个
代码奉上:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool isBrother(string str, string s) {  //判断是否为兄弟字符串
	if (str.size() == s.size()) {
		if (str == s)
			return false;
		sort(str.begin(), str.end());  //分别对两个字符串进行字典序排序
		sort(s.begin(), s.end());
		if (str == s)
			return true;
	}
	return false;
}
int main() {
	int num;   //输入字符串数量
	while (cin >> num) {
		string str;  
		string word, s;
		int index;
		vector<string> vs;
		for (int i = 0; i < num; ++i) {
			cin >> str;   //输入字符串
			vs.push_back(str);
		}
		sort(vs.begin(), vs.end());  // 因为是字典,一定要排序!!
		cin >> word;   //输入要匹配的标志字符串
		cin >> index;   //输入要输出的第几个兄弟字符串
		int counts = 0;

		for (int i = 0; i < num; ++i) {
			if (isBrother(word, vs[i])) {
				counts++;
				if (counts == index)
					s = vs[i];
			}
		}
		if (!vs.empty())
			cout << counts << endl;
		if (counts >= index)
			cout << s << endl;

	}
	return 0;
}

2、乒乓球筐

题目描述:
nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?

思路:这个题是典型的map的应用,我们先将A、B两个字符串放入map中,map中第一个参数是字符串的第i位,第二个参数就是第i位出现的次数,然后当i从字符‘A’–‘Z’增加中,如果A[i]<B[i],返回No,跳出循环,如果i已经走到Z,则返回Yes
代码:

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
	string str1,str2;
	while(cin>>str1>>str2)
	{
		map<char,int> m1;
		for(auto e1:str1)
		{
			m1[e1]++;
		}
		map<char,int> m2;
		for(auto e2:str2)
		{
			m2[e2]++;
		}
		for(int i='A';i<'Z';i++)
		{
			if(m1[i]<m2[i])
			{
				cout<<"No"<<endl;
				break;
			}
			if(i=='Z')
			{
				cout<<"Yes"<<endl;
			}
		}
	}
	sysem("pause");
	return 0;
}

3、骆驼命名法

题目描述:
从C/C++转到Java的程序员,一开始最不习惯的就是变量命名方式的改变。C语言风格使用下划线分隔多个单词,例如“hello_world”;而Java则采用一种叫骆驼命名法的规则:除首个单词以外,所有单词的首字母大写,例如“helloWorld”。
请你帮可怜的程序员们自动转换变量名。
题目很简单,代码也很简单,一个for循环就可以搞定,先找到‘_’的位置,即为第i位,再erase掉,再将第i位的字符串转成大写。
代码:

#include <iostream>
#include <stdlib.h>
#using namespace std;
int main()
{
	string str;
	while(cin>>str)
	{
		for(int i=0;i<str.size();i++)
		{
			if(str[i]=='_')
			{
				str.erase(i,1);
				str[i]-=32;
			}
		}
		cout<<str<<endl;
	}
}

有问题的欢迎广大读者指正!!!

发布了33 篇原创文章 · 获赞 13 · 访问量 1045

猜你喜欢

转载自blog.csdn.net/Vicky_Cr/article/details/104975868