题解 | #参数解析#

参数解析

https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677

//本大神的杰作
//双引号设置一个标志是否出现过, 存储左右双引号位置, 对双引号的内容进行剪切
//记录左空格位置, 再遇到空格时进行剪切
//循环到末尾没有空格没有双引号也要根据空格位置进行剪切
//但是如果双引号周围有空格, 可能会重复剪切, 所以双引号剪切完了, 左空格位置右移, 如果下一个是空格就不用处理了
/*
描述
在命令行输入如下命令:

xcopy /s c:\\ d:\\e,

各个参数如下:

参数1:命令字xcopy

参数2:字符串/s

参数3:字符串c:\\

参数4: 字符串d:\\e

请编写一个参数解析程序,实现将命令行各个参数解析出来。


解析规则:

1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时,参数仍然是4个,第3个参数应该是字符串C:\\program files,而不是C:\\program,注意输出参数时,需要将""去掉,引号不存在嵌套情况。
3.参数不定长

4.输入由用例保证,不会出现不符合要求的输入
数据范围:字符串长度:
1
≤
s
≤
1000
 
1≤s≤1000 
进阶:时间复杂度:
O
(
n
)
 
O(n) ,空间复杂度:
O
(
n
)
 
O(n) 
输入描述:
输入一行字符串,可以有空格

输出描述:
输出参数个数,分解后的参数,每个参数都独占一行
*/
import java.util.ArrayList;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        ArrayList<String> list = new ArrayList<>();
        int slow = 0;
        int exitYinhao = 0;
        int lYinhao=0, rYinhao=0, lSpace=0;

        for (int i = 0; i < str.length(); i++)
        {
            char ch = str.charAt(i);
            if( ch=='"' && exitYinhao == 0)
            {
                lYinhao = i;
                exitYinhao = 1;
                continue;
            }
            else if( ch=='"' && exitYinhao == 1 )
            {
                rYinhao = i;
                exitYinhao = 0;
                list.add( str.substring(lYinhao+1,rYinhao) );
                lSpace = i+1;
            }
            else if( ch == ' ' && exitYinhao == 0)
            {
                if(i==lSpace)
                {
                    lSpace = i+1;
                    continue;
                }
                list.add( str.substring(lSpace,i) );
                lSpace = i+1;
            }
            else if ( i==str.length()-1 )
            {
                list.add( str.substring(lSpace,i+1) );
            }
        }
        System.out.println(list.size());
        for(String s:list)
        {
            System.out.println(s);
        }
    }
}

华为机试题解 文章被收录于专栏

华为机试题解

全部评论

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务