海康笔试题--字符串分割

  一、题目要求是对输入的字符串以及分隔符按照分隔符来分割,当时是在替别人做题,由于误导以及时间的紧迫并没有完全读懂题。
这里写图片描述
题目给的样例是:
输入:abc,sjd,sdjhsj,sjfas,sjhd, ,
输出:abc
sjd
sdjhsj
sjfas
sjhd
输出格式是一个小字符串占用一行。
  当时并没有完全读懂题,题目中说分割符中没有空格,但是在最后一个逗号前却有一个空格,我一时没有读懂是什么意思。后来再读题才发现原来最后一个逗号是分隔符,分隔符,分隔符啊,我真是笨。
  现在既然读懂题目了,就可以做了
输入是字符串 分割符,(字符串,空格,分隔符)
  那我们首先要找到分割符号,然后再根据这个分割符号去分割我们的字符串。
python实现如下所示:

import re
a = "abc,,sjs,,djfdj,, ,,"


symbol = a.split(" ")[1]
symbol = "[" + symbol + "]"
# result = a.split(',')
result = re.split(symbol, a)
b = [x.rstrip() for x in result if x]
for num in b:
    print(num)

C++实现如下(参考https://www.nowcoder.com/discuss/41562):

    string temp,s,x;
    cin>>s>>x;
    vector<string> v;
    int pos = s.find(x, 0);
    int old = pos;
    v.push_back(s.substr(0, old));

    while (pos != string::npos) {
            old = pos;
            pos = s.find(x, pos + x.size());
            v.push_back(s.substr(old + x.size(), pos - old - x.size()));
            cout<<pos<<" "<<s<<endl;
        }
    for (auto c : v)
        cout << c << endl;
    return 0;

这个的实现也比较好理解,首先使用cin输入字符串和分割符,
s中存储字符串,x中存储分隔符
利用find函数在某位值开始向后找到分割符所在的位置
将从起始位置到分割符位置之间的字符串放入v容器中
如果找到的分割符的位置不为-1(为-1表示没找到),则继续更新分割符起始位置
输出容器中的所有小字符串。
  这段程序中涉及到的几个函数:cin,find,substr
  因为cin 遇到空格、回车、Tab会自动停止接收,如果是需要接收多个字符串,那就继续接收空格之后的字符串给下一个变量。所以s中存储的是字符串,x中存储的是分隔符
  find(分隔符, 起始位置),find是寻找字符串中从起始位置开始的第一个分隔符的位置,起始位置默认为0。
  substr(起始位置,长度),substr是将字符串从起始位置开始—起始位置+长度这个位置的字符串复制一遍。
ok,就这样。

猜你喜欢

转载自blog.csdn.net/qq_18293213/article/details/78209031