题目一
最近遇到的一个华为笔试题
题目:
对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
建议先自己思考再看答案,特别是题目中的第二点。
代码:
#include
#include
int main(void){char str[300][210],temp[2001];int n = 0,len=0,i,j=0;memset(str,0,sizeof(str));while(fgets(temp, sizeof(temp), stdin)){len=strlen(temp);for(i=0;i if((temp[i] >= 'a' && temp[i]<= 'z') || (temp[i] >= 'A' && temp[i]<= 'Z' )){str[n][j] = temp[i];j ;}else if(j > 0){j=0;n ;}}for(i = n-1;i>0;i--){printf("%s ",str[i]);}printf("%s\n",str[0]);n = 0;j = 0;i = 0;len = 0;memset(str,0,sizeof(str));memset(temp,0,sizeof(temp));}return 0;
}
这个答案实际上用到了栈的思想,依次把每次单词依次入栈,之后再出栈。
题目二
求下面的程序输出:
#include "stdio.h"int main()
{int arr[5] = {1,2,3,4,5};int *p = arr;for(size_t i=0;i<5;i ){printf("i:%d %d\n",p[i],*p );}return 0;
}
这个题目考察两点:
1、printf
和 C 中的 cout <<
一样,先执行后面的再执行前面的,实现方式用了栈的思想,先入栈的后出栈执行。
2、p[i] = * (p i)
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。