zoukankan      html  css  js  c++  java
  • 华为机试练习(一)

    一、字符串最后一个单词长度

    1、

    # -*- coding:utf-8 -*-  
    while True:
        try:
            print u'请输入一串字符串'
            line=raw_input()
            if len(line)==0:
                break
            if len(line)>5000:
                line=line[:5000]
            wordlist=line.split()
            print len(wordlist[-1])
        except:
            break
    

     注意 raw_input()和line.split()的应用

     注意break 跳出循环,当不输入和输入错的时候就结束整段程序。

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	string s;
    	while(getline(cin,s))
    	{
    		int n=0,flag=1;
    		
    		for(int i=s.length()-1;i>=0;--i)
    		{
    			if (flag && s[i]==' ')//去除最后的空格,注意设置标记的作用
    			{
    				continue;
    			}
    			else if(s[i]!=' ')
    			{
    				flag=0;
    				++n;
    			}
    			else
    			{
    				break;
    			}
    		}
    		cout <<n<<endl;
    	}
    	return 0;
    }
    

    2、

    cin:

    用法1:最基本,也是最常用的用法,输入一个数字:

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	int a,b;
    	cin>>a>>b;
    	cout<<a+b<<endl;
    }
    

    用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin>>a;
    	cout<<a<<endl;
    }

    3、cin.get() 
    cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a;
    	cin.get(a);
    	cout<<a<<endl;
    }

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a;
    	a=cin.get();
    	cout<<a<<endl;
    }
    

     

    两种方法都可以,但是都只接受第一个字符

    3.2用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin.get(a,8);
    	cout<<a<<endl;
    }
    

    类似于上面,接收了1个''。

    4、

    4.1 cin.getline() // 接受一个字符串,可以接收空格并输出

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin.getline(a,8);
    	cout<<a<<endl;
    }
    

    cin.getline()实际上有三个参数,cin.getline(接受字符串m,接受个数5,结束字符) 

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin.getline(a,8,'5');
    	cout<<a<<endl;
    }
    

     

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin.getline(a,8,'9');
    	cout<<a<<endl;
    }
    

    选择最靠近的那个条件。cin.getline(a,b,c)其后必须要有参数输入,否则报错。

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	char a[3][20];
        for(int i=0;i<3;i++)
            {
        	    cout<<"请输入第"<<i+1<<"个字符串:"<<endl;
    			cin.getline(a[i],20); 
            }
        cout<<endl;
        for(int j=0;j<3;j++)
        	{
        		cout<<"输出a["<<j+1<<"]的值:"<<a[j]<<endl; 
        	}
    }
    

    数组类型的输入和输出

    注意学会格式化的输入和输出。

     5、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include”

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	string str;
    	getline(cin,str);
    	cout<<str<<endl;
    	
    }
    

    和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数,注意这个声明的是string ,而非char。

    再有,这个将整个行都能输出,而没有‘’这种情况。

    二、length

    #include<iostream> 
    #include<string>
    using namespace std;
    int main()
    {
    	string a;
    	int n;
    	getline(cin,a);
    	n=a.length(); 
    	cout<<n<<endl;
    	
    }
    

    二、

    写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

    输入描述:

    输入一个有字母和数字以及空格组成的字符串,和一个字符。

    输出描述:

    输出输入字符串中含有该字符的个数。

    1、将想要匹配的字符串分为大小写,按顺序与大写或者小写的匹配

    #include<iostream>  
    #include<sstream>  
      
    using namespace std;  
      
    int main()  
    {  
        string str;  
        while (getline(cin, str))  
        {  
            char ch;  
            string str2;  
            getline(cin,str2);  
            ch=str2[0];  //匹配的值 
            char ch2 = 0;  //定义0,是为了空格不输入的情况考虑
            if (ch >= 'a'&&ch <= 'z')  
            {  
                ch2 = ch - 32;  //如果大写,增加小写的值,如果小写增加大写的值 
            }  
            if (ch >= 'A'&&ch <= 'Z')  
            {  
                ch2 = ch + 32;  
            }  
            int count = 0;  
            for (int i = 0; i<str.size(); i++)  
            {  
                if (str[i] == ch || str[i] == ch2)  
                {  
                    count++;  
                }  
            }  
            cout << count << endl;  
        }  
        return 0;  
    }  
    

    #include<iostream>
    #include<string>
    
    using namespace std;
    int main()
    {
    	string str;
    	while(getline(cin,str))
    	{
    		char ch,ch2;
    		cin>>ch;
    		int n=0;
    		if(ch>='a'&&ch<='z')
    		{
    			ch2=ch-32;
    		} 
    		else if(ch>='A' && ch<='Z')
    		{
    			ch2=ch+32;
    		}
    		else
    		{
    			ch2=ch;
    		}	
    		for(int i=0;i<str.length();i++)
    		{
    			if (str[i]==ch || str[i]==ch2)
    			{
    				n++;
    			}
    		}
    		cout<<n<<endl;
    	}
    	return 0;
    } 

    这段程序就实现不了空格字符的个数统计。

    2、

    #include<iostream>
    #include<string>
    
    using namespace std;
    int main()
    {
    	string str;
        
    	while(getline(cin,str))
    	{
    		char ch;
            cin>>ch; 
            char ch2;
    		if(ch>='a'&&ch<='z')
    		{
    			ch2=ch-32;
    		} 
    		else if(ch>='A' && ch<='Z')
    		{
    			ch2=ch+32;
    		}
            else
            {
                ch2=ch;
            }
            int n=0;
    		for(int i=0;i<str.length();i++)
    		{
    			if (str[i]==ch || str[i]==ch2)
    			{
    				n++;
    			}
    		}
    		cout<<n<<endl;
    	}
        
    	return 0;
    } 
    

    牛客网的测试不通过,所以以后最好用getline,而别用cin>>给变量赋值。

    三、

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。  

    1、

    //构建1000个数组,输入选出的数的时候就已经在处理数据 
    #include <iostream>
    using namespace std;
    int main() 
    {
    	int N, n;
    	while (cin >> N) //输入的个数 
    	{
            int a[1001] = { 0 };
            while (N--) 
    		{
                cin >> n;//输入的数组 
                a[n] = 1;//该编号置1 
           }
           for (int i = 0; i < 1001; i++)
           {
                if (a[i])
                   cout << i << endl;    
           }
       }
     return 0;
    }//
    

    2、set容器

    #include<iostream>    
    #include<cstring>    
    #include<set>    
    #include<ctime>    
    #define N 999 //三位小数。    
    using namespace std;    
        
    int main()    
    {    
        set<int> s;    //set容器,从小到大排序,不重复
        int i,n,num;    
        while(cin>>n)    
        {    
            s.clear(); //容器清洗   
            for(i=0; i<n; i++)    
            {       
                cin>>num;    
                s.insert(num);//插入数据 
            }    
            set<int>::iterator p;    
            for(p=s.begin(); p!=s.end(); p++)    
            {    
                cout<<*p<<endl;    
            }    //这样会多输出一个空格
        }    
        return 0;    
    }     
    

     

    #include<iostream>
    #include<set>
    
    using namespace std;
    
    int main()
    {
    	int loop ;
      	while (cin >> loop) //看题目,set容器 
    	{
        	int a[1000], tem, i = 0;
    		for (int i = 0; i < loop; i++)
    		{
    			cin >> a[i];
    		}
    		set<int> num(a, a + loop);//这个什么鬼?
            for (set<int>::iterator it = num.begin(); it != num.end(); it++)
    		{
                cout << *it << endl;
            }
        }
        return 0;
    }
    

    3、插入法排序

    #include<iostream>  
    using namespace std;  
    
    void insert_sort(int a[],int len) //选择法排序 
    {  
        int i=0,j=0,temp=0,n;  
        for(i=1;i<len;i++)  
        {  
        	temp =a[i];  
            for(j=i-1;j>=0&&temp<a[j];j--)  
            {  
                a[j+1]=a[j];  
            }  
            a[j+1]=temp;
            
    		for(n=0;n<len;n++)
    		{
    			cout<<a[n]<<" ";
    		}  
    		cout<<endl;
        }  
    }    
       
    int main()  
    {  
         int a[]={9,8,7,6,5,4,3,2,1} ;
    	 cout<<"初始排序:"<<endl;
    	 for(int n=0;n<9;n++)
    		{
    			cout<<a[n]<<" ";
    		}  
    	 cout<<endl<<endl;
         insert_sort(a,9);
         
    	 return 0;  
    }  
    

    可以看到,就是从第二个数开始,前面的数先排序,然后,将第三个数插入,依次顺序排开。

    4、选择排序

    #include<iostream>  
    using namespace std;  
    
    void insert_sort(int a[],int len) //选择法排序 
    {  
        int i=0,j=0,temp=0,n,smal;  
        for(i=0;i<len-1;i++)  
        {   
            smal=i;//最小值的下标,最小值一直放在这个地方 
            for(j=i+1;(a[j]<a[smal]&&j<len);j++)  
            {  
                temp=a[smal];//中继容器 
                a[smal]=a[j]; 
    			a[j]=temp;  
            }  
            
    		for(n=0;n<len;n++)
    		{
    			cout<<a[n]<<" ";
    		}  
    		cout<<endl;
        }  
    }    
       
    int main()  
    {  
         int a[]={9,8,7,6,5,4,3,2,1} ;
    	 cout<<"初始排序:"<<endl;
    	 for(int n=0;n<9;n++)
    		{
    			cout<<a[n]<<" ";
    		}  
    	 cout<<endl<<endl;
         insert_sort(a,9);
         
    	 return 0;  
    }  
    

    首先假设第一个是最小值,然后和后面的值一一比较,碰到更小的,交换位置,所以第一个始终都是最小的。继而第二,第三等排下去。

    5、冒泡排序

    #include<iostream>  
    using namespace std;  
    
    void insert_sort(int a[],int len) //冒泡排序 
    {  
        int i=0,j=0,temp=0,n,smal;  
        for(i=0;i<len-1;i++)  
        {    
            for(j=0;j<len-1;j++)  
            {  
                if (a[j]>a[j+1])
                {
                	temp=a[j];
                	a[j]=a[j+1];
                	a[j+1]=temp;
                }
            }  
            
    		for(n=0;n<len;n++)
    		{
    			cout<<a[n]<<" ";
    		}  
    		cout<<endl;
        }  
    }    
       
    int main()  
    {  
         int a[]={9,8,7,6,5,4,3,2,1} ;
    	 cout<<"初始排序:"<<endl;
    	 for(int n=0;n<9;n++)
    		{
    			cout<<a[n]<<" ";
    		}  
    	 cout<<endl<<endl;
         insert_sort(a,9);
         
    	 return 0;  
    }  
    

     

    从左向右依次两两比较,比较n次后就排好了,但是有个缺点,增加了无效的排序。

     6、去重

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int deletrepeat(int a[],int n)
    {
    	cout<<a[0]<<" ";//输出第一个数 
    	int flag=1;//设置标志 
    	int b[n];
    	b[0]=a[0];//存储去重复后的数组 
    	int index=1;//变化后的下标 
    	for(int i=1;i<n;i++)//循环比较的次数 
    	{
    		for(int j=0;j<index;j++)//j新的数组下标
    		{
    			if(a[i]==b[j])
    			{
    				flag=0;
    			}
    		}
    		if(flag==1)
    		{
    			b[index]=a[i];
    			cout<<b[index]<<" "; 
    			index++;	
    		}
    		flag=1;
    	}
    	return index;
    }
    int main()
    {
    	int a[]={1,2,3,4,4,5,6,2};
    	int n=8;
    	deletrepeat(a,n);
    	
    }  

    重复的值,下标改变了,需要重新附一个值给下标。

    再有,c++,求数组长度的函数没有,length()是求字符串的。  

     四、

    连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 
    •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 

    输入描述:

    连续输入字符串(输入2次,每个字符串长度小于100)

    输出描述:

    输出到长度为8的新字符串数组

    1、

    #include<iostream>
    #include<string>
    #include<cmath>
    using namespace std;
    void Add_eight(string a,int n)
    {
    	int x,y;
    	x=(n/8);
    	y=((n/8)+1)*8;
    	for(int j=0;j<x;j++)
    	{
    		for(int k=j*8;k<(j*8+8);k++)
    		{
    			cout<<a[k];
    		}
    		cout<<endl;
    	}
    	if((n%8)!=0)
        {
    		for(int m=8*x;m<n;m++)
    		{
    			cout<<a[m];
    		}
    		for(int q=n;q<8*x+8;q++)
    		{
    			cout<<0;
    		}
        }
    	//cout<<endl;//用例之间的换行不要在函数中 
    } 
    int main()
    {
    	string a,b;
    	getline(cin,a);//输入a,b 
    	getline(cin,b);
    	int n1,n2;
    	n1=a.length();
    	Add_eight(a,n1);
    	cout<<endl;////注意,用例输出在这 
    	n2=b.length(); 
    	Add_eight(b,n2);
    	
    }
    

     

    注意用例之间的换行位置。

     2、

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string a,b,c;
    	a="abcdefg";
    	b=a.substr(0,3);
    	c=a.substr(0);
    	cout<<b<<endl;
    	cout<<c<<endl;
    	
    } 
    

    3、c++ append用法

    (1)向string的后面加C-string 

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string s="hello ";
    	const char *c="out here";
    	s.append(c);
    	cout<<s<<endl;
    } 
    

    (2).向string的后面加C-string的一部分 

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string s="hello ";
    	const char *c="out here";
    	s.append(c,3);//将c的前三个字符连接到s中 
    	cout<<s<<endl;
    } 
    

    (3).向string的后面加string 

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string s="hello ";
    	string c="wide ";
    	string q="world";
    	s.append(c);
    	s=s+q;//字符串可以相加相连
    	cout<<s<<endl;
    } 
    

    (4)向string的后面加string的一部分 

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string s="hello ";
    	string c="wide world";
    	s.append(c,5,5);//把字符串s2中从5开始的5个字符连接到当前字符串的结尾 
    	cout<<s<<endl;
    } 
    

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string s="hello ";
    	string c="wide world";
    	s.append(c.begin()+5,c.end());//把c的迭代器begin()+5和end()之间的部分连接到当前字符串的结尾当前字符串的结尾 
    	cout<<s<<endl;
    } 
    

    (5).向string后面加多个字符 

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string s="hello ";
    	s.append(4,'6');
    	cout<<s<<endl;
    } 
    

    4、

    #include <iostream>
    using namespace std;
    
    int main()
    {
        string str;
        while(getline(cin,str))
    	{
            while(str.size()>8)
    		{
                cout << str.substr(0,8) <<endl;
                str=str.substr(8);
            }
            cout << str.append(8-str.size(),'0') << endl; //不够8位的补0
        }
    }
    

     五、

    题目描述

    写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

    输入描述:

    输入一个十六进制的数值字符串。

    输出描述:

    输出该数值的十进制字符串。

    1、它由0-9,A-F组成,字母不区分大小写。

    #include <iostream>
    using namespace std;
    
    int main()
    {
     int a;
     while(cin>>hex>>a){
     cout<<a<<endl;
     }
    }

    2、

    #include <iostream>  
    #include <iomanip>  
    using namespace std;  
    int main()  
    {  
       int n;  
      
       cout << "Enter a decimal number: ";  
       cin >> n;  
      
       cout << n << " in hexadecimal is: "   
            << hex << n << endl  //十六进制 
            << dec << n << " in octal is: "   
            << oct << n << endl //八进制 
            << setbase( 10 ) << n << " in decimal is: "   
            << n << endl;  //十进制 
      
       return 0;  
    }  
    

    3、输入和输出同时存在的情况

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	int n;
    	cin>>hex>>n;
    	cout<<n<<"的十六进制:"<<hex<<n;
    	return 0;
    	
    }
    

    输入的是个十六进制数,但是保存的n却是十进制,还需要hex才能输出十六进制。

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	int n;
    	cin>>oct>>n;
    	cout<<n<<"的十六进制:"<<hex<<n;
    	return 0;
    	
    }
    

    3、传统一个一个读取的方式

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	char *sp=new char[10];
    	while(cin>>sp)
    	{
    		int n;
    		int num;
    		int result=0;
    		n=strlen(sp);
    		for(int i=2;i<n;i++)
    		{
    			switch(sp[i])
    			{
    				case 'A':
    				case 'a'://大于10的处理 
    					num=10;break;
    				case 'B':
    				case 'b':
    					num=11;break;
    				case 'C':
    				case 'c':
    					num=12;break;
    				case 'D': 
    				case 'd':
    					num=13;break;
    				case 'E':
    				case 'e':
    					num=14;break;
    				case 'F':
    				case 'f':
    					num=15;break;
    				default:
    				    if(sp[i]>='0'&&sp[i]<='9')
    					{
    						num=sp[i]-'0';
    					} 
    					
    			}
    			result=result*16+num;
    		}
    		cout<<result<<endl;
    		result=0;
    	}
    	 return 0;	
    }
    

    注意case 的情况,只能分开来识别,不能出现case(a||b)这种情况。因为后面给的是逻辑值,只能0或者1。  

    4、字符串长度求法

    C/C++ strlen(str)和str.length()和str.size()都可以求字符串长度。

    其中str.length()和str.size()是用于求string类对象的成员函数

    strlen(str)是用于求字符数组的长度,其参数是char*。

    #include <string>
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	string name="babababa";
    	cout<<name.length()<<endl;
    	cout<<name.size()<<endl;
    	
    	char mail[100]="haha";
    	cout<<strlen(mail)<<endl;
    	
    	char *psd;
    	psd="lalala";
    	cout<<strlen(psd)<<endl;
    	
    	return 0;
    }
    

      

      

  • 相关阅读:
    事件基础 (事件对象 阻止事件冒泡)
    document
    linux 下使用shell命令iostat监控iowait是否超负载
    使用shell来监控linux的io
    linux下使用awk命令按时间段筛选日志
    gulp 压缩js
    cf776D Mahmoud and a Dictionary
    P1313 计算系数
    __builtin_popcount() 函数
    HDU 6386 Age of Moyu
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/8666949.html
Copyright © 2011-2022 走看看