2014年讯飞笔试

编程题

1.请输入一个16进制的字符串转换成十进制整数输出,例如输入0x32d5,输出13013,函数原型如下:

int invert(char *inputstr),假设字符串内都是有效字符,不需要去除无效字符。

#include<iostream>
#include<cmath>
using namespace std;

int invert(char *inputstr){

	char *p=inputstr;
	char *q=p;
	int len=0;
	int sum=0;
	while(*(p++)!='\0')//求出字符串长度,也可以用库函数strlen求解
	++len;
        q+=2;   //跳过0x
	int n=len-2;
	while (*q!='\0')

	{   cout<<*q<<endl;
		if(*q>='0'&&*q<='9'){
			sum+=(*q-'0')*pow(16,n-1);
		    --n;
			++q;
		}
		if(*q>='a'&&*q<='f'){
			sum+=(*q-'a'+10)*pow(16,n-1);
		    --n;
			++q;
		}
		if(*q>='A'&&*q<='F'){
			sum+=(*q-'A'+10)*pow(16,n-1);
		    --n;
			++q;
		}
	}
	
return sum;

}


int main(){
char s[]="0x32d5";
cout<<invert(s);
}

2.函数void CleanString(char *str)的功能是删除字符串中所有数字字符和非字母字符,并将字符串压缩,例如原字符串为

abcd12ef5ghij8#**yz,处理后的结果为:abcdefghijyz.

要求:1.不得使用包括strlen在内的任何库函数

            2.在原字符串上操作,不得新开辟字符串空间

            3.算法复杂度尽量的好

void CleanString(char *str){

	char *p,*q;
	p=q=str;
	while(*q!='\0'&&*p!='\0'){
		
		if((*q>='a'&&*q<='z')||(*q>='A'&&*q<='Z')){
		    *p=*q;
			++p;
			++q;
		}
	    else
			++q;
	}
	*(++p)='\0';

}
int main(){
char s[]="abcd12ef5ghij8#**yz";
CleanString(s);
cout<<s<<endl;
}



你可能感兴趣的:(2014年讯飞笔试)