• 2017华为优招笔试题


     

    哎,没有接到笔试通知,不知道为啥就错过了。

    之后见到题目,前两道编程题。其实都见过类似的题目,有点思路,但是直接快速完整实现出来,水平还是达不到。

    这样的题目,也不算难,三道编程题至少AC两道才算可以。但是自己还是写代码写的少,需要多练习,增加熟练度。

    第一道题,统计一个字符串中,出现的字母字符串,数字字符串和其他字符组成的字符串的个数。

    思想非常简单直观,但对于边界条件以及何时将统计的数量进行增加要仔细考虑。

    代码如下:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str;
    	getline(cin,str);
    
    	int a[3] = { 0, 0, 0 };
    	for (int i = 0; i < str.length()-1;){
    		while (((str[i] >'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) && i<str.length() - 1){
    			while (((str[i] >'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) && i<str.length() - 1){
    				++i;
    			}
    			a[0]++;
    			break;
    		}
    		while ((str[i] >='0'&& str[i] <= '9' ) && i<str.length() - 1){
    			while ((str[i] >= '0' && str[i] <= '9') && i<str.length() - 1){
    				++i;
    			}
    			a[1]++;
    			break;
    		}
    		while ((str[i] >= 0 && str[i] <= 47) || (str[i] >= 58 && str[i] <= 64) || (str[i] >= 91 && str[i] <= 96) || (str[i] >= 123) && i<str.length() - 1){
    			while ((str[i] >= 0 && str[i] <= 47) || (str[i] >= 58 && str[i] <= 64) || (str[i] >= 91 && str[i] <= 96) || (str[i] >= 123) && i<str.length() - 1){
    				++i;
    			}
    			a[2]++;
    			break;
    		}
    
    	}
    
    	
    	for (int m = 0; m < 3; m++){
    		cout << a[m];
    		if (m < 2){
    			cout << ",";
    		}
    	}
    
    	system("pause");
    	return 0;
    }
    

    第二题是将字符串按照单词逐个反转的题目,也是常见题目。一般思想都是做两次翻转。整个字符串翻转,然后将单词逐个翻转。

    例如:输入 i am student      输出:student am i

    代码如下:

    /*
    
    对字符串进行逐词翻转;
    
    */
    
    #include <iostream>  
    using namespace std;
    //编程实现字符串中各单词的翻转  
    //方法1  
    void Revese(char *str){
    
    	char *start = str, *end = str, *ptr = str; //开头,结尾,中间指针  
    	while (*ptr++ != '')
    	{
    		if (*ptr == ' ' || *ptr == '') //找到一个单词  
    		{
    			end = ptr - 1; //end指向单词末尾  
    			while (start<end)
    				swap(*start++, *end--); //把单词的字母逆置  
    			start = end = ptr + 1; //指向下一个单词开头  
    		}
    	}
    
    	start = str, end = ptr - 2;//start指向字符串开头,end指向字符串末尾  
    	while (start<end)
    	{
    		swap(*start++, *end--);
    	}
    }
    
    int main()
    {
    	char Str[30] = "i am from henan";
    	Revese(Str);
    	cout << Str << endl;
    	getchar();
    	return 0;
    }
    

    方法二:

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    //编程实现字符串中各单词的翻转
    //方法2
    void Revese(char *str){
    	char *start=str,*end=str,*ptr=str;
    	while (*ptr++!='');
    	end=ptr-2; //找到字符串末尾
    	while (start<end) 
    	{
    		swap(*start++,*end--);//将整个字符串逆置
    	}
    	start=str;//指向字符串开头
    	end=ptr-2;//指向字符串末尾
    	ptr=start;//指向字符串开头
    	while (*ptr++!='')
    	{
    		if (*ptr==' '||*ptr=='') //找到一个单词
    		{
    			end=ptr-1;//指向单词末尾
    			while (start<end)
    			{
    				swap(*start++,*end--);
    			}
    			start=end=ptr+1;//指向下一个单词开头
    		}
    	}
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char Str[30]="i am from henan";
    	Revese(Str);
    	cout<<Str<<endl;
    	getchar();
    	return 0;
    }
    
  • 相关阅读:
    mysql表结构同步
    关于Java8中lambda约简函数reduce的一个计算问题
    激烈的歌曲有助于编程
    今天刷了数据解构与算法这门课 感觉略有收获
    我有一个好朋友 他的名字叫刘洋 他的ID是北极的大企鹅 他的技术不错 他渴望成为架构师 猎头们路过可以去他的博客看看
    缓存雪崩,缓存击穿,缓存穿透
    celery
    Redis
    django 缓存的使用
    base64 加密
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/7092135.html
Copyright © 2020-2023  润新知