华为机试题目

来源:互联网 发布:seo标题和关键字 编辑:程序博客网 时间:2024/05/02 20:20

在网上找了一些华为机试的题目,每日坚持写代码。

1、字符、字符串与数值间的转换

分析:
int i = (ch-48); 这个语句完成了单个字符 ch 转化为数字并存入整型变量 i 的功能。因为字符 0 在 ASCII 码中对应了 48,后面的数值也是以 1 递增,所以用它对应的ASCII码减去48就是这单个字符的整数形式.如此,我们也可以反过来,实现将整型转换成字符:char ch = (i+48);字符串之间的转换,我们不能同时将一个字符串中的所有字符进行转换,不调用外部函数的话,我们只能利用上述这一特性把字符串一个一个的转换。

#include <stdio.h>#include <string.h>int StringInt(const char *str) // 将字符串转换为int类型并返回             {    int val = 0;    int index = ( strlen(str) - 1 ); // 取索引值    int pn = 1; // 表示是正数还是非正数, 正数表示为1, 非正数表示为0    int f = 1, i = 1; // 用于后面的循环    const char *pChar = str;    if ('-' == *pChar) { // 判断字符串第一个元素是否为负号        index--;        pn = 0;        *pChar++;    }    while (index >= 0)    {        f = 1;        for (i=1; i<=index; i++)            f *= 10;        val += ( (*pChar++) - 48 ) * f;        index--;    }    if (0 == pn)        val *= -1; // 转换为负数    return val;}int main(void){    printf("%d\n", StringInt("333"));    printf("%d\n", StringInt("0"));    printf("%d\n", StringInt("-0"));    printf("%d\n", StringInt("-321"));    return 0;}                         /*参考输出结果:333  0   0   -321  */
0 0