2017年华为招聘会笔试题
笔试题目(机试,共两题)
题目一:子串分离
题目描述:
通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
如果输入“abc def gh i d”结果将是abc,def,gh,i,d,
要求实现函数
void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“abc def gh i d”
输出:“abc,def,gh,i,d,”
题目二:逆序链表输出。
题目描述:
将输入的一个单向链表,逆序后输出链表中的值。链表定义如下:
typedef struct tagListNode
{
int value;
struct tagListNode *next;
}ListNode;
要求实现函数:
void converse(ListNode **head);
【输入】head: 链表头节点空间已经开辟好
【输出】head: 逆序后的链表头节点
【返回】无
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
参考答案:
题目一:
一个字符串里面包含了一些位置不定的空格符,把里面所有的非空格字符找出来,把空格用‘,’替换。
替换后的句子末尾必须有一个‘,’存在。
例如“this is an demo”替换后应该为:
"this,is,an,demo,"
[cpp] view plaincopyprint?
01.#include
02.
03.char *ReplaceString(const char *pInString, char *pOutString)
04.{
05. char *cp = pOutString ;
06. //去除字符串开头的若干空格
07. while(*pInString == ' ')
08. {
09. pInString ++;
10. }
11.
12. while(*pInString)
13. {
14. *cp = *pInString;
15. cp++;
16. pInString++;
17.
18. if(*pInString == ' ')
19. {
20. *cp= ',';
21. cp++;
22. pInString++;
23. }
24. }
25.
26. *cp = '\0';
27.
28. //最后一个字符用逗号结束
29. if(*(cp - 1) != ',')
30. {
31. *cp = ',';
32. *(++cp) = '\0';
33. }
34. return pOutString;
35.}
36.
37.int main()
38.{
39. char *pin = " This is a demo";
40. char pout[100];
41. ReplaceString(pin, pout);
42. printf("%s \n", pin);
43. printf("%s \n", pout);
44. return 0;
45.}
题目二参考答案
link *Reversal(link *listhead)
{
link *p, *q, *head = NULL;
p = listhead;
while (p != NULL)
{
q = p->next;
p->next = head;
head = p;
p = q;
}
return head;
}