笔试题目“翻转字符串”的实现-阿里云开发者社区

开发者社区> 人工智能> 正文

笔试题目“翻转字符串”的实现

简介:

笔试题目

//写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。


据说这题在笔试或者面试当中,出现的频率非常高。刚好在书上也看到这题,又在博客园看到这题出现了(“发职位经典面试题”)。

作者也提示了,方法是先反转整个字符串,然后再反转字串。譬如先将“I am a student”反转为“tneduts a ma I”,然后再对每个字串(空格分割)反转一次。思想就那么简单吧。实现起来的话,我就有点凌乱了。C++没学好。伤不起。

算法

#include <stdio.h>

void main()
{
    char str[]="I am a student";
    printf(str);
    printf("\n");

    char *p,*q;
    char temp;
    p=q=str;14     while(*q!='\0')
    {
        q++;
    }
    q--;
    while(p<=q)
    {
        temp=*p;
        *p=*q;
        *q=temp;
        p++;
        q--;
    }//反转整个字符串

    printf(str);
    printf("\n");

    q=str;//指针指向开始位置
    char *s,*t;
    s=t=str;
    while(*q!='\0')
    {
        if(*q==' ')
        {
            t--;
            while(s<=t)
            {
                temp=*t;
                *t=*s;
                *s=temp;
                s++;
                t--;
            }//反转局部字符串

            s=q+1;
            t=q;
        }52         q++;
        t++;
    }

    printf(str);
    printf("\n");
}

改进

运行之后,我发现是成功的。

但是怎么想都感觉有点问题,把“I am a student”换成“you are a student”果然有问题。

没有处理最后一个字串的缘故。因为我是按照

if(*q==' ')

来处理字串的,而字符串最后一个的结尾没有空格了,而是以'\0'结尾的。

最后一个字串的处理我是这样做的。

if(*q==' '||*(q+1)=='\0')
        {
            t--;
            if(*(q+1)=='\0')//处理最后一个字串
                t++;

看上去有点奇怪吧,但是确实是可以了。

代码貌似可以继续优化吧。怎么都感觉自己写的代码好烂。

代码

以下是完整代码

已处理最后字串的完整代码

 

另外给一个我在《程序员面试宝典》看到的代码,不过这个主要采用数组处理,而且使用了库函数(strlen()),但是思想差不多吧。可以参考参考。

《程序员面试宝典》实现方法

 

既然看到了,就应该要思考吧。仅提升..

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章