C语言笔试两题,有坑

嵌入式Linux

共 3070字,需浏览 7分钟

 ·

2021-03-14 11:18

题目一

最近遇到的一个华为笔试题


题目:


对字符串中的所有单词进行倒排。

说明:

1、构成单词的字符只有26个大写或小写英文字母;

2、非构成单词的字符均视为单词间隔符;

3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

4、每个单词最长20个字母;


题目链接:

https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836?tpId=37&tqId=21254&rp=1&ru=%2Fta%2Fhuawei&qru=%2Fta%2Fhuawei%2Fquestion-ranking&tab=answerKey

建议先自己思考再看答案,特别是题目中的第二点。


代码:

#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;
}

这个答案实际上用到了栈的思想,依次把每次单词依次入栈,之后再出栈。




题目二

求下面的程序输出:

#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、printfC++ 中的 cout << 一样,先执行后面的再执行前面的,实现方式用了栈的思想,先入栈的后出栈执行。

2、p[i] = * (p+i)






推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~



浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报