• 2013 华为校招机试题


    第一题

    删除字符串中所有给定的子串(40分)
    问题描述:
    在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
    要求实现函数:
    int delete_sub_str(const char *str, const char *sub_str, char *result_str)
    【输入】 str:输入的被操作字符串,sub_str:需要查找并删除的特定子字符串
    【输出】 result_str:在str字符串中删除所有sub_str子字符串后的结果
    【返回】 删除的子字符串的个数
    注:
    I、子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:
    在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果
    匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。

    II、输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。
    示例
    输入:str = "abcde123abcd123"
    sub_str = "123"
    输出:result_str = "abcdeabcd"
    返回:2
    输入:str = "abcde123abcd123"
    sub_str = "1234"
    输出:result_str = "abcde123abcd123"
    返回:0

    方法解析:C语言忘了差不多了,用了c++的string类型的substr()和erase()函数,还是比较简单的,代码如下:

     1 #include "stdafx.h"
     2 #include <string>
     3 #include <iostream>
     4 using namespace std;
     5 int delete_sub_str(const char *str, const char *sub_str,char *result_str)
     6 {
     7     string s_str = str;
     8     string s_sub_str = sub_str;
     9     int len=s_sub_str.size();
    10     int l = s_str.size();
    11     int num = 0;
    12     if (l > 100)      //输入字符串长度超过100
    13     {
    14         cout << "ERROR" << endl;
    15         return -1;
    16     }
    17     if (len > l)       //子串长度大于所给字符串
    18     {
    19         cout << "ERROR" << endl;
    20         return -1;
    21     }
    22     for (int i = 0; i < s_str.size() - len+1; i++)
    23     {
    24         if (s_str.substr(i, len) == s_sub_str)     //与子字符串比较
    25         {
    26             s_str.erase(i, len);      //从下标i开始,删除len个字符
    27             result_str=(char *)s_str.c_str();
    28             num++;
    29         
    30         }
    31     }
    32     cout << result_str << endl;
    33     return num;
    34 }
    35 int _tmain(int argc, _TCHAR* argv[])
    36 {
    37     char s1[] = "abcde123abcd123";
    38     char s2[] = "123";
    39     char *s=s1;
    40     int n = delete_sub_str(s1, s2,s);
    41     cout << n << endl;
    42     return 0;
    43 }
  • 相关阅读:
    2-字符串篇(4)
    1-数组篇(2)
    Neo4j-电影图(演员与电影之间的流行文化联系)
    NLP(相关资料)
    Oracle中的rank()函数使用
    PostgreSQL入门
    风格迁移论文理解--A Neural Algorithm of Artistic Style
    【Math】复数表示和傅里叶变换
    github资源使用--程序员必备
    【TF-2-3】Tensorflow-可视化(TensorBoard)
  • 原文地址:https://www.cnblogs.com/xujian2014/p/4237304.html
Copyright © 2020-2023  润新知