金山训练营入学考试题
1 编写函数实现十进制正整数到十四进制数的转换,在屏幕输出转换结果。
说  明:用0, 1, 2, 3,....., 8, 9, A, B, C, D表示十四进制的基本的14个数。
        例:键盘输入14,屏幕输出10。


比较好的解法:
void fun( int input)
{
    if (input >= 14)
        fun(input/14);
    printf("%c","0123456789ABCD"[input%14]);
}

很明显考的不用库函数,其他实现这里就不贴了
3 文件名:3.cpp
功  能:编程实现猜词游戏
说  明:对于单词“hello”,程序提示输出:?????,等待用户输入。
用户输入时,若单词包含该字母,如“l”,则程序显示输出“??ll?”;
若单词不含该字母,如“a”,则程序提示用户猜错。
继续等待用户输入,直到用户猜出全部字母,或输入错误次数超过最大允许出错次数,游戏结束。
条  件:1)      单词由程序内定,由全小写字母组成
2)      提示输出问号数量等于单词长度
3)      最大允许出错次数等于单词长度
看我的实现
int main()
{
string str="hello",temp="?????",ss;
int num=0;
while (temp.find_first_of('?')!=-1&&num<str.size())
{
    cin
>>ss;
    
++num;
    
for (int i=0;i<ss.size();++i)
    
{
        
for (int j=0;j<str.size();++j)
        
{
            
if (ss.at(i)==str.at(j))
            
{
                temp.at(j)
=str.at(j);
            }

        }

    }

cout
<<temp<<endl;
}

    
return 0;
}
topic.csdn.net\u\20080517\21\8606a5d6-9c07-4ebc-a7bb-243af402e20b4bc0.html

【某公司C++笔试题】

1.编写函数,检查给定字符串是否整数,如果是,返回其整数值(注:不允许使用某种特定的库函数)。
也算经典的atoi问题了吧,看我的实现
int my_atoi(char* str)
{
    
int i=0,num=0;
    
while (*str)
    
{
        
if (*str<='9'&&*str>='0')
        
{
            num
=num*10;
            num
+=(*str-'0');
        }

        
else
        
{
            cout
<<"ileigg word\n";
            
return -1;
        }

        str
++;
    }


    
return num;
}
上课的时候我曾用java写过一个类似的,当时用的两层循环来计算,后来看了一个帖子,很惭愧。
看下面淘宝网一道面试题
让我写出atol的实现代码,我记得微软的源码,当场写出来了,如下: 
long __cdecl atol( 
        
const char *nptr 
        ) 

        
int c;              /* current char */ 
        
long total;        /* current total */ 
        
int sign;          /* if '-', then negative, otherwise positive */ 

        
/* skip whitespace */ 
        
while ( isspace((int)(unsigned char)*nptr) ) 
            
++nptr; 

        c 
= (int)(unsigned char)*nptr++;        sign = c;          /* save sign indication */ 
        
if (c == '-' || c == '+'
            c 
= (int)(unsigned char)*nptr++;    /* skip sign */ 

        total 
= 0

        
while (isdigit(c)) 
            total 
= 10 * total + (c - '0');    /* accumulate digit */ 
            c 
= (int)(unsigned char)*nptr++;    /* get next char */ 
        }
 

        
if (sign == '-'
            
return -total; 
        
else 
            
return total;  /* return result, negated if necessary */ 
}
 

接着面试官问我,为什么要在程序中做(
int)(unsigned char)*nptr的强转?我没答出来,哪位能说说为什么要强转啊????

看正解:
因为isspace(),isdigit()这类函数接受一个int 参数,参数的值必须是一个可以用unsigned char 表示的值或者是EOF,以下是 man 手册的原文: 

int isspace(int c); 
int isdigit(int c); 
 
These functions check whether c, which must have the value of anunsigned 
char or EOF,falls into a cetern charcter class according to the current locale. 

所以需要用c 
= (int)(unsigned char)*nptr++,来确保从 *nptr++ 到 c 是进行零扩展而不是符号扩展,保证 c 中存放的是一个unsigned char 所能表示的值。 

还有一类题是经典的itoa,下面给出正解:
void my_itoa(int s, char str[]) {
    
int
 i, t;
    
for (i = 0, t = s; t > 0;) 
{
        str[i
++= t / 10 + '0'
;
        t 
%= 10
;
    }

}




2.有两个无序链表lsit1和list2,编写函数把list1和list2合并成一个递增的链表。
这道题考的是基础知识,学过数据结构都应该能写出来
已折叠

topic.csdn.net\u\20081011\15\9ee842e0-9c0d-4804-8376-42abdfe80698.html