當了一年的 Facebook Rotational Software Engineer 心得分享

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 3978|回复: 9
收起左侧

FB的那道remove comment解答

[复制链接] |试试Instant~ |关注本帖
zengm321 发表于 2015-3-5 14:30:06 | 显示全部楼层 |阅读模式

2015(1-3月) 码农类General 硕士 全职@Facebook - 内推 - 技术电面  | Other |

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
看大家的FB面经,感觉remove comment这道题很困扰大家
好吧,我来贴个链接,攒个rp。 大家互相帮助,信息共享,祝大家早日拿到满意offer。
虽然不完全一样,但是基本解决问题,而且还同时解决了"//"。单行注释的问题。
http://geeksquiz.com/remove-comments-given-cc-program/

. 1point3acres
string removeComments(string prgm)
{
    int n = prgm.length();
    string res;. 留学申请论坛-一亩三分地

    // Flags to indicate that single line and multpile line comments
    // have started or not.
    bool s_cmt = false;. 1point 3acres 论坛
    bool m_cmt = false;
. visit 1point3acres for more.
. from: 1point3acres
    // Traverse the given program
    for (int i=0; i<n; i++)
    {
        // If single line comment flag is on, then check for end of it
        if (s_cmt == true && prgm == '\n').留学论坛-一亩-三分地
            s_cmt = false;

        // If multiple line comment is on, then check for end of it
        else if  (m_cmt == true && prgm == '*' && prgm[i+1] == '/')
            m_cmt = false,  i++;. From 1point 3acres bbs
. From 1point 3acres bbs
        // If this character is in a comment, ignore it 来源一亩.三分地论坛.
        else if (s_cmt || m_cmt)
            continue;. 牛人云集,一亩三分地

        // Check for beginning of comments and set the approproate flags. From 1point 3acres bbs
        else if (prgm == '/' && prgm[i+1] == '/')
            s_cmt = true, i++;
        else if (prgm == '/' && prgm[i+1] == '*'). more info on 1point3acres
            m_cmt = true,  i++;

        // If current character is a non-comment character, append it to res
        else  res += prgm;
    }. From 1point 3acres bbs
    return res;
}

评分

2

查看全部评分

sunnyiez 发表于 2015-3-11 05:25:52 | 显示全部楼层
This problem should use automaton to handle. My automaton has four states. The initial state is 0, indicting non-commented part.

#include <iostream>. 牛人云集,一亩三分地
using namespace std;

void remove_comment (string str)
{
        int status = 0 ;
        for (int i = 0; i < str.size(); ++ i)
        {
                char ch = str ;
                switch (status) .本文原创自1point3acres论坛
                {. Waral 博客有更多文章,
                case 0 : if (ch == '/') status = 1; else std::cout<<ch ; break;
                case 1 : if (ch == '*') status = 2; else { status = 0; std::cout<<'/'<<ch ;} break;
                case 2 : if (ch == '*') status = 3; else ; break;
                case 3 : if (ch == '/') status = 0; else status = 2 ; break;  . from: 1point3acres
                }
        }
}

int main()
{
        // test ;
        string str1 = "/* hello world*/Hello world" ;. 牛人云集,一亩三分地
        remove_comment (str1) ; std::cout<<std::endl;
        string str2 = "out/*** * /*no output */put"  ;
        remove_comment (str2) ; std::cout<<std::endl;. From 1point 3acres bbs
        string str3 = "/**/out/*** * \n /* \n no output */put/*///* * /* ///* */"  ;  
        remove_comment (str3) ; std::cout<<std::endl;
}
. 1point 3acres 论坛

补充内容 (2015-3-11 05:30):
char ch = str [   i ]
回复 支持 1 反对 0

使用道具 举报

houqingniao 发表于 2015-3-5 20:51:33 | 显示全部楼层
多谢楼主~~
但是里面好像是有bug的吧
prgm == '*' && prgm[i+1] == '/') 这个i+1会不会抛出index out of。。。
回复 支持 1 反对 0

使用道具 举报

sunfish 发表于 2015-3-5 14:56:17 | 显示全部楼层
非常感谢楼主,楼主的精神真值得我么你学习。
回复 支持 反对

使用道具 举报

rengokantai 发表于 2015-3-5 21:46:48 | 显示全部楼层
论坛的系统得改一下了,那个数组i标志总是被当做italic标签被吃掉,不利于代码交流
回复 支持 反对

使用道具 举报

sunnyiez 发表于 2015-3-11 05:34:34 | 显示全部楼层
Below is the automaton I designed. FYI.

                               
登录/注册后可看大图


回复 支持 反对

使用道具 举报

wendy33 发表于 2015-3-11 23:12:04 | 显示全部楼层
sunnyiez 发表于 2015-3-11 05:34
Below is the automaton I designed. FYI.
. Waral 博客有更多文章,
点赞!! 字数字数
回复 支持 反对

使用道具 举报

thewave 发表于 2015-10-21 07:40:37 | 显示全部楼层
sunnyiez 发表于 2015-3-11 05:34
Below is the automaton I designed. FYI.
. 1point3acres
In state 3, if receive another '*', state should stay at 3.
来源一亩.三分地论坛.
Good point to use DFA.
I think DFA is always worth consideration if input is related to stream and pattern, such as this question, and strstr.. visit 1point3acres for more.
. visit 1point3acres for more.
string removeComments(string input){
        //design FSM. visit 1point3acres for more.
        int state = 0;
        string res = "";
        for(int i=0;i<input.length();i++){
            char ch = input;
            switch(state){
                case 0:
                    if(ch=='/')state = 1;
                    else res += ch;
                    break;
                case 1:
                    if(ch=='/')state = 20;
                    else if(ch=='*')state = 30;
                    else {
                        res += '/' + ch;
                        state = 0;
                    }
                    break;. 留学申请论坛-一亩三分地
                case 20: //single line comment
                    if(ch=='\n')state = 0;
                    break;
                case 30:   //multiple line comments
                    if(ch=='*')state = 31;
                    break;.本文原创自1point3acres论坛
                case 31:
                    if(ch=='/')state = 0;
                    else if(ch=='*')state = 31;
                    else state = 30;
                    break;
            }
        }
    }.1point3acres网

. from: 1point3acres
. Waral 博客有更多文章,
补充内容 (2015-10-21 07:44):
不好意思,忘记return res;
Mobile Apps Category (English)728x90
回复 支持 反对

使用道具 举报

gamespeed 发表于 2015-10-27 04:04:59 | 显示全部楼层
有个边界条件,即每次访问prgm[i+1]时,需要先检查i+1<n
回复 支持 反对

使用道具 举报

zzhmxf 发表于 2016-10-23 08:07:14 | 显示全部楼层
想问一下各位,如果代码里面有类似这么一句: 来源一亩.三分地论坛.
String s = "asf\"daf/*";
那如何处理quote 里面的 /*  以及string里面的quote?
. From 1point 3acres bbs谢谢啦。
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-21 01:58

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表