i am from shanghai 将字符串倒过来输出的算法

来源:互联网 发布:360数据恢复手机版 编辑:程序博客网 时间:2024/05/16 06:40

问题: i am from shanghai 

输出为 shanghai from am i

思考:这道题是要将单词倒过来输出,但是英文单词的词序还是不变的。这个题目比较简单的方式其实是先完全倒叙,即变成

 iahgnahs morf ma i

那么,接下来要做的就是把每一个单词再次进行倒叙就行了。也就是重复进行倒叙操作,这是本题比较简单的算法。

那么,如何做倒叙算法呢?

有很多种方法,但是,比较简单的,就是从中分开,然后第一个和最后一个对调,以此类推,交换次数为 字符串的长度除以2

for (i = 0; i <= len; i++)

{

    temp = str[1];

    str[i] = str[len - i -1];

    str[len - i -1] = temp;

}

这样就实现了倒叙算法。接下来只要将各个单词再倒叙就好了。那么首先就要分离出每个单词,这个就用空格来控制。即用判断语句,当遇见空格或者字符串结尾的、0时就停止。分离出单词然后再用倒叙就完成了。

具体代码如下:

#include<stdio.h>
#include <string.h>
void re(char *, int);
void re2(char *);
int main()
{
char str[] = "we are friends";
printf("%d\n", strlen(str));
re(str, strlen(str));
printf("%s\n", str);
re2(str);
    printf("%s\n", str); 
}
void re(char *str, int l)             //第一次倒叙
{
    int len = l;
int i;
int temp;
for (i = 0; i < len / 2; i++ )
{
temp = str[i];
   str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
void re2(char *str)                          //实现单词分离和第二次倒叙

    int index;
int len = 0;
int start = 0;
    for (index = 0; index <= strlen(str); index++)
{
if (str[index] != ' ' && str[index] != '\0' )
{
                         len++;
}
else

re(str + start, len);
start = start + len + 1;
len = 0;
}
}
}

0 0
原创粉丝点击