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

简介:

笔试题目

//写一个函数,将字符串翻转,翻转方式如下:“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()),但是思想差不多吧。可以参考参考。

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

 

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

相关文章
|
存储 编解码 Cloud Native
FFmpeg修复受损视频
FFmpeg修复受损视频
|
12月前
|
Kubernetes Linux 虚拟化
VMware Fusion 13.6.2 发布下载,现在完全免费无论个人还是商业用途
VMware Fusion 13.6.2 发布下载,现在完全免费无论个人还是商业用途
2000 13
VMware Fusion 13.6.2 发布下载,现在完全免费无论个人还是商业用途
|
缓存 网络协议 开发者
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
1884 0
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
|
Web App开发 缓存 网络协议
POST与GET的区别深度比较分析
HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
640 0
|
前端开发 算法 API
《通过减少 draw call 提升渲染性能-沧东》演讲视频 + 文字版
《通过减少 draw call 提升渲染性能-沧东》演讲视频 + 文字版
566 0
|
SQL 存储 数据可视化
iOS 数据持久化方案-Realm的使用(上)
iOS 数据持久化方案-Realm的使用(上)
1269 0
iOS 数据持久化方案-Realm的使用(上)
|
存储 监控 安全
[iOS研习记]——聊聊野指针与僵尸对象定位
在iOS项目开发中,或多或少的我们都会遇到一些Crash的情况,大部分Crash抛出的异常都是NSException层的,这类异常是OC层代码问题造成的,通常堆栈信息和异常的提示信息都非常明确,可以直接定位到出问题的代码,从而使这类问题的解决并不困难。可以引起Crash的异常除了NSException外,还有Unix层和Mach层的异常。
2124 0
|
存储 Dart 前端开发
超详解析Flutter渲染引擎|业务想创新,不了解底层原理怎么行?
Flutter 作为一个跨平台的应用框架,诞生之后,就被高度关注。它通过自绘 UI ,解决了之前 RN 和 weex 方案难以解决的多端一致性问题。Dart AOT 和精减的渲染管线,相对与 JavaScript 和 webview 的组合,具备更高的性能体验。 本文的分析主要以 Android 平台为例,IOS 上原理大致类似,相关的参考代码基于 stable/v1.12.13+hotfix.8 。
3081 0
超详解析Flutter渲染引擎|业务想创新,不了解底层原理怎么行?