牛客网三道编程题(三 之华为机试在线训练(二)字符串反转、统计不同字符个数、删除字符串中出现最少的字符

1、字符串反转

        这道题目非常简单,但是有一个地方需要强调一下:对于string 类型,它的size()返回值并不是 int 类型,而是string::size_type 类型,它是一个无符号类型的值。因此不能使它出现负值,不然可能会出现未知错误。 切记:在C++ Primer 书中强调了,如果在表达式中出现了带符号数和无符号数混合使用,会产生意想不到的后果。比如,假设 n 是一个带有负值的 int ,则表达式 s.size() < n 几乎就是 True, 这是因为负数 n 会自动转换成一个非常大的无符号数。

牛客网三道编程题(三 之华为机试在线训练(二)字符串反转、统计不同字符个数、删除字符串中出现最少的字符_第1张图片

程序如下:
int main()
{
	string s;
	getline(cin, s);
	for (auto i = s.size() - 1; i > 0; i--)
	{
		cout << s[i];
	}
	cout << s[0];
	return 0;
}
如果使用了auto 关键字,那么对于首字符最好单独输出。我第一次没有把首字符单独输出,就发生了一个非常奇怪的错误。于是,把auto 改成 int 以后,就没有那种问题。如果用迭代器程序还可以这么写,效率更高:
#include 
#include 
#include 
using namespace std;
int main()
    {
    string s;
    getline(cin,s);
    reverse(s.begin(),s.end());
    cout<

2、统计不同字符的个数

        这道题目也很简单,它的套路和之前几题很相似。先定义一个整型数组,数组的下标索引是字符(实际是 ASCLL 码)
牛客网三道编程题(三 之华为机试在线训练(二)字符串反转、统计不同字符个数、删除字符串中出现最少的字符_第2张图片

3、删除字符串中出现次数最少的字符(可能不止一个)
牛客网三道编程题(三 之华为机试在线训练(二)字符串反转、统计不同字符个数、删除字符串中出现最少的字符_第3张图片
代码如下:
#include 
using namespace std;
 
int main()
{
    string s;
 while(cin>>s)
 { 
    int a[26]={0};
    int i=0,min;
    while(s[i])
    {  a[s[i]-'a']++;
       i++;
    }
    min=a[s[0]-'a'];
    for(i=1;imin)
            cout<
一点说明:刚开始我写的是 getline(cin,s)。但是提示错误,后来改成 while(cin >> s)就好了

你可能感兴趣的:(C++基础与提高,IT校招——面试/笔试题集锦)