zoukankan      html  css  js  c++  java
  • [C++面试题]之字符串(转)

    基本上求职者进行笔试时没有不考字符串的。字符串也是一种相对简单的数据结构,容易引起面试官反复发问。事实上,字符串也是考验 程序员编程规范和编程习惯的重要考点。不要忽视这些细节,因为这些细节会体现你在操作系统、软件工程、边界内存处理等方面的知识掌握能力,也会成为企业是否录用你的参考因素。

    1、怎样将整数转换成字符串数,并且不用函数 itoa ?

        答案:

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    	int num =12345,i=0,j=0;
    	char temp[7],str[7];
    	while(num)
    	{
    		temp[i]=num%10+'0'; //将整数num从后往前的每一位数转换成char保存在temp中
    		i++;
    		num=num/10;
    	}
    	temp[i]=0;
    	cout<<"temp:"<<temp<<endl;
    	i=i-1;
    	//反转temp
    	while (i>=0)
    	{
    		str[j++]=temp[i--];
    	}
    	str[j]=0;
    	cout<<"string:"<<str<<endl;
    	return 0;
    }

        如果可以使用 itoa函数的话,则十分简单,如下:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    //使用itoa函数
    int main ()
    {
    	int num=12345;
    	char str[7];
    
    	itoa(num,str,10);
    	cout<<"integer:"<<num<<endl<<"string:"<<str<<endl;
    	return 0;
    }

    2、已知函数原型是 char *strcpy(char *strDest,const char *strSrc);,其中strDest是目的字符串,strSrc是源字符串。

        (1)不调用C++/C的字符串库函数,请编写strcpy函数。

        (2)strcpy函数把strSrc的内容复制到strDest,为什么还要char *类型返回值?

        答案:

    (1)代码如下:

    char *strcpy(char *strDest,const char *strSrc)
    {
    	assert((strDest!=NULL)&&(strSrc!=NULL));
    	char *address=strDest;
    	while((*strDest++=*strSrc++)!='')
    	NULL;
    	return address;
    }

    (2)为了实现链式表达式,返回具体值。

    例如:

    int length=strlen(strcpy(strDest,"hello world"));

    3、编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是" abcdefghi “,如果n=2,移位后应该是 “hiabcdefg ”。

        答案:

    (1)使用标准库函数方法:

    void LoopMove(char *pStr,int steps)
    {
    	int n=strlen(pStr)-steps;
    	char temp[MAX_LEN];
    	strcpy(temp,pStr+n);
    	strcpy(temp+steps,pStr);
    	*(temp+strlen(pStr))=‘’;
    	strcpy(pStr,temp);
    }

    (2)不使用标准库函数的方法:

    CSDN上一道题(请看第五题和评论)

     

    4、将一句话里的单词进行倒置,标点符号不倒置。比如一句话:i come from beijing.倒置后变成:beijing. from come i。

          解析:解决该问题可以分为两步:第一步全盘置换该语句成:.gnijieb morf emoc i。第二步进行部分翻转,如果不是空格,则开始翻转单词。

          答案:

    具体代码如下:

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    	int num=-12345,i=0,j=0,flag=0,begin,end;
    	char str[]="i come from beijing.";
    	char temp;
    	j=strlen(str)-1;
    	//第一步是进行全盘翻转
    	while(j>i)
    	{
    		temp=str[i];
    		str[i++]=str[j];
    		str[j--]=temp;
    	}
    	//第二步进行部分翻转
    	i=0;
    	while(str[i])
    	{
    		if(str[i]!=' ')
    		{
    			begin=i;
    			while(str[i] && str[i]!=' ')
    				i++;  //找到str[i]为空格符
    			i=i-1;    //空格符回退一个
    			end=i;
    		}
    		while(end>begin) //部分翻转
    		{
    			temp=str[begin];
    			str[begin++]=str[end];
    			str[end--]=temp;
    		}
    		i++; 
    	}
    	cout<<"string:"<<str<<endl;
    }

    5、编程:输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置。例如:“yyabcdabjcabceg”,输出结果应该为 abc和 3。

        答案:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main ()
    {
    	string str,tep;
    	cout<<"请输入字符串:";
    	cin>>str;
    
    	for(int i=str.length()-1;i>1;i--)
    	{
    		for(int j=0;j<str.length();j++)
    		{
    			if(j+i<=str.length())
    			{
    				size_t t=0;
    				size_t num=0;
    				tep=str.substr(j,i);//从大到小去字串
    				t=str.find(tep);    //正序查找
    				num=str.rfind(tep); //逆序查找
    				if(t!=num)          //如果两次查找的位置不一致说明存在重复
    				{
    					cout<<tep<<" "<<t+1<<endl;
    					return 0;
    				}
    			}
    		}
    	}
    	return 0;
    }
    C++ 面试题已经基本完成了,可能还有一些其它方面的题型,比如操作系统、数据库、软件测试、计算机网络等方面的内容。接下来几天可能会写一些这方面的内容,我们一起期待吧..
  • 相关阅读:
    python爬虫---selenium库的用法
    Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
    python字符串截取、查找、分割
    jupyter notebook快捷键使用指南
    python中防止字符串转义
    Python之print()函数
    使用腾讯电脑管家清理电脑后,上不了网了
    Python正则表达式指南
    python之format函数
    python安装media报错
  • 原文地址:https://www.cnblogs.com/qq575654643/p/11754009.html
Copyright © 2011-2022 走看看