欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

两则简单面试题

程序员文章站 2022-06-04 16:58:07
...

之前看到一个面试题目:

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

/**********************
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"

转载于:https://www.cnblogs.com/wangzhiyu811/archive/2011/07/12/2104661.html