zoukankan      html  css  js  c++  java
  • 将字符串中的字符'*'移到串的前部分(联发科实习生笔试题)

    example: ab**cd**e*12

    处理后结果为:*****abcde12,函数返回值5

    这个题目类似于上一个题,即使用快慢指针解决。本以为不难,但是还是有点区别,因为这道题的快慢指针的初始化是在串的最后一个字符,然后往前移,而终止条件是第一个字符,上一道题的终止条件是最后一个字符的下一个字符。

    1. /*     
    2. * Copyright (c) 2011 alexingcool. All Rights Reserved.     
    3. */  
    4. #include <iostream>  
    5.   
    6. #define NUMBER 1000  
    7.   
    8. using namespace std;  
    9.   
    10. char source[] = "ab**cd**e*12";  
    11. const int size = sizeof source / sizeof *source;  
    12.   
    13. int moveStar(char *array, int size)  
    14. {  
    15.     char *fast = array + size - 1, *slow = array + size - 1;  
    16.     int num;  
    17.   
    18.     while(fast != array) {  
    19.         if(*fast != '*') {  
    20.             *slow = *fast;  
    21.             slow--;  
    22.         }  
    23.         fast--;  
    24.     }  
    25.   
    26.     *slow-- = *fast;  
    27.     num = slow - array + 1;  
    28.   
    29.     while(slow != array)  
    30.         *slow-- = '*';  
    31.     *slow = '*';  
    32.   
    33.     return num;  
    34. }  
    35.   
    36. void main()  
    37. {  
    38.     int starNumber = moveStar(source, size);  
    39.   
    40.     cout << "source = " << source << endl;  
    41.     cout << "starNumber = " << starNumber << endl;  
    42. }  


    结果如下:

    上面的代码有个bug,总体思路是对的,当输入为*ab**cd**e*12时,出现错误,需要做一个小改动

    1. int moveStar(char *array, int size)    
    2. {    
    3.     char *fast = array + size - 1, *slow = array + size - 1;    
    4.     int num;    
    5.   
    6.     while(fast != array - 1) {    
    7.         if(*fast != '*') {    
    8.             *slow = *fast;    
    9.             slow--;    
    10.         }    
    11.         fast--;    
    12.     }    
    13.    
    14.     num = slow - array + 1;    
    15.   
    16.     while(slow != array)    
    17.         *slow-- = '*';    
    18.     *slow = '*';    
    19.   
    20.     return num;    
    21. }    


    结果:


  • 相关阅读:
    windows权限维持之注册表
    mstsc痕迹清理
    内网常用爆破手法
    RDP攻击&防御
    Java SPI 机制
    mysqldump 数据库备份
    Redis分布式锁
    Seata分布式事务中间件学习和实践
    pytube
    idea github登录
  • 原文地址:https://www.cnblogs.com/wb118115/p/2538350.html
Copyright © 2011-2022 走看看