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

简介:

笔试题目

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

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

 

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

相关文章
|
存储 编译器 C语言
数组、指针练习题及解析(含笔试题目讲解)其一(上)
数组、指针练习题及解析(含笔试题目讲解)其一
130 0
|
6月前
|
存储 SQL 算法
LeetCode题目67:二进制求和
LeetCode题目67:二进制求和
|
6月前
|
C语言
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
42 1
|
6月前
|
存储 SQL 算法
LeetCode题目43:字符串相乘
LeetCode题目43:字符串相乘
|
6月前
|
存储 算法 数据挖掘
LeetCode题目41:缺失的第一个正数
LeetCode题目41:缺失的第一个正数
|
7月前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
|
7月前
|
机器学习/深度学习 NoSQL Shell
力扣刷题-翻转字符串
力扣刷题-翻转字符串
41 1
|
7月前
|
Java
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
66 0
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
|
7月前
剑指Offer LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
剑指Offer LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
46 0
|
存储 Serverless
数组、指针练习题及解析(含笔试题目讲解)其一(下)
数组、指针练习题及解析(含笔试题目讲解)其一(下)
73 0