C語言筆試兩題,有坑
題目一
最近遇到的一個(gè)華為筆試題
題目:
對(duì)字符串中的所有單詞進(jìn)行倒排。
說明:
1、構(gòu)成單詞的字符只有26個(gè)大寫或小寫英文字母;
2、非構(gòu)成單詞的字符均視為單詞間隔符;
3、要求倒排后的單詞間隔符以一個(gè)空格表示;如果原字符串中相鄰單詞間有多個(gè)間隔符時(shí),倒排轉(zhuǎn)換后也只允許出現(xiàn)一個(gè)空格間隔符;
4、每個(gè)單詞最長(zhǎng)20個(gè)字母;
題目鏈接:
https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836?tpId=37&tqId=21254&rp=1&ru=%2Fta%2Fhuawei&qru=%2Fta%2Fhuawei%2Fquestion-ranking&tab=answerKey
建議先自己思考再看答案,特別是題目中的第二點(diǎn)。
代碼:
#include<stdio.h>
#include<string.h>
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<len;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;
}
這個(gè)答案實(shí)際上用到了棧的思想,依次把每次單詞依次入棧,之后再出棧。



題目二
求下面的程序輸出:
#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;
}
這個(gè)題目考察兩點(diǎn):
1、printf 和 C++ 中的 cout << 一樣,先執(zhí)行后面的再執(zhí)行前面的,實(shí)現(xiàn)方式用了棧的思想,先入棧的后出棧執(zhí)行。
2、p[i] = * (p+i)


評(píng)論
圖片
表情
