两则简单面试题

之前看到一个面试题目:

  将字符串转换成整型数字,当时一想有点没头绪,没办法自己学的太烂了,还不具备编程思想,算法也是一塌糊涂。今天写了下程序,特在这里记录下:

/**********************
Description:
	将字符串转换成相应的整型数
	例如:“653”-> 653
********************/
#include <stdio.h>

int strtoint(char s[])
{
	int i,n;
	n=0;
	for(i=0; s[i]>='0' && s[i]<='9'; ++i)
	{
		n=10*n+(s[i]-'0');
	}
	return n;
}
int main()
{
	char s[]={"4672"};
	int number;
	number=strtoint(s);
	printf("输出整数型数字为:%d\n",number);
	system("pause"); 
	return 0;
}
表达式:s[i]-'0',能够计算出s[i]中存储的字符所对应的数字值。

第二个:

/******************
Description:
	将大写字母转换成小写形式;只对ASCII字符集有效
******************/
int lower(int c)
{
	if(c>='A' && c<='Z')
		return c+'a'-'A';
	else
		return c;
}

  作为一个较大的例子,我们来重新编写将字符串转换为对应数值的函数strtoint。

这里编写的函数比上面的要更通用,它可以处理可选的前导空白符以及一个可选的加(+)活减(-)号。

解析:

  如果有空白符的话,则跳过;如果有符号的话,则读取符号;取整数部分,并执行转换:

int strtoint(char s[])
{
	int i, n, sign;
	for(i=0; isspace(s[i]); i++)	//跳过空白符
		;
	sign=(s[i]=='-') ? -1 : 1;
	if(s[i]=='+' || s[i]=='-')		//跳过符号
		i++;
	for(n=0; isdigit(s[i]); i++)
		n=10*n+(s[i]-'0');
	return sign*n;
}

通用性还是不咋滴,输入格式限制成"...+X"、"...-X",(...)表示若干个空白符,当然X后可以是其他非数字字符

稍微调整程序结构可以,输入格式可以允许:"...X"

posted on 2011-07-12 19:43  Tony.Works  阅读(445)  评论(0编辑  收藏  举报