• 字符串右移(创发科技实习面试题)


    引子:今年暑假7月份的时候,打算找个实习单位锻炼一下能力,学点儿东西,投了创发科技的实习生,让我去面试,结果当场出一道字符串右移的题目让我坐他旁边编程,我直接懵逼了。考官后来看我实在做不出来,就问我的思路,我也是糊里糊涂说了一些,但一讨论总是存在各种问题,最后也不了了之没有再问了。现在复习完了C语言的第11章,回头再重新做一下。(最终的结果是没有应聘成功,但我想主要原因是我的实习时间太短了,只有2个月,而他要求半年,当然题目没做出来也是一个重要原因吧)


    题目:编写一个函数,要求输入一个字符串和要移动的位数n,使得该字符串能向右移动n位,输出移动后的字符串。例如:tomloveslily移动2位得lytomlovesli。


    思路:意思就是把字符串分成两部分,交换位置,实际操作的思路是:把最后n个字符先保存起来(待会儿用),再把前strlen-n个字符往后移动n个,最后把之前保存的后n个字符放在前n个字符的位置上。注意两个问题:交换部分时需要借助第三者来暂时存储(类似于交换x,y的值需要借助第三变量);移动字符串时要从右往左挨个赋值,不能从左往右赋值(否则的话相当于改变了字符再移动)。

    代码如下:

    void right_move(char * str, int n)  //字符串str右移n个位置的函数
    {
        int i;
        char * temp = (char *)malloc(n * sizeof(char));  //临时分配一块儿内存,大小根据要移动的位数决定
        int len = strlen(str);
    
        for(i=0; i<n; i++)        //给temp[]赋值为str[]的后n位
            temp[i] = str[len-n+i];
    
        for(i=0; i<len-n; i++)    //把字符串的前len-n位右移n位
            str[len-i-1] = str[len-i-1-n];    //每个字符右移n位
    
        for(i=0; i<n; i++)        //字符串前n位赋值(即原来的后n位)
            str[i] = temp[i];
    }

    总的代码如下:

    /* 输入一个字符串,输入需要移动的位数,将字符串向右移动相应的位数 */
    /* 例如:tomloveslily移动两位得lytomlovesli */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void right_move(char *, int);
    
    int main(void)
    {
        int n;
        char str[30];
        puts("Please enter a line of string(less than 30 chars and "enter" to stop):");
        gets(str);
        puts("enter the digits "n" you want to move:");
        scanf("%d", &n);
        puts(str);
        right_move(str, n);
        puts(str);
    }
    
    void right_move(char * str, int n)
    {
        int i;
        char * temp = (char *)malloc(n * sizeof(char));
        int len = strlen(str);
    
        for(i=0; i<n; i++)        //给temp[]赋值为str[]的后n位
            temp[i] = str[len-n+i];
    
        for(i=0; i<len-n; i++)    //把字符串的前len-n位右移n位
            str[len-i-1] = str[len-i-1-n];    //字符右移n位
    
        for(i=0; i<n; i++)        //字符串前n位赋值(即原来的后n位)
            str[i] = temp[i];
    }

    总结:字符串这一章的题目还是挺有意思的,花了很多时间来对待是值得的,涉及到一些算法或者“办法”(排序、压缩、移动、交换等),挺考验人的思路的。同时这一章的内容也是面试或者笔试的常见考察内容。

  • 相关阅读:
    智能Office同步器Alpha 1(界面预览)
    SQLite系列免费/开源数据库组件/应用
    软件推荐:智能PE资源提取器
    怎样编写MS Office安全插件
    博客园Logo创意之我的朋友弄的
    DNN(DotNetNuke)研究手札系列1-资源
    VB5/6反编译器(半)
    关于Peer Review、代码评审和测试驱动等
    [转载]关于怎样优化HTML以加快下载速度的10个方法
    完全优化MySQL数据库性能的八大巧方法
  • 原文地址:https://www.cnblogs.com/TomLily/p/6031614.html
Copyright © 2020-2023  润新知