您的位置:首页 > 其它

字符串“student a am i”转换为"i im a student"

2016-06-05 23:56 246 查看
题目:

字符串“student am a i”,现编写代码将字符串转换为“i am a stduent”,要求空间复杂度是O(1)

思路  :用指针的形式,pstart指向字符串头,pend指向字符串尾,先将整个字符串进行逆序,逆序结束后,在进行每个单词的逆序,同样的道理,用指针指向单词的开始位置,如果字符串不为空,或者字符串不为\n,指针便向后移动,直到找到空格,然后将指针指向空格的前一个位置,这样两个指针一个指向单词的起始位置,一个指向单词的结束位置,进行整个单词的逆序,如果遇到空格,则指针后移。

#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void reverse_str(char *left, char *right)
{
assert(left);
assert(right);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int my_strlen(const char * str)
{
int count = 0;
while (*str++)
{
count++;
}
return count;
}
void reverse(char arr[]) //(cahr *str)
{
char *pstart = arr;
//char *pend = arr + my_strlen(arr) - 1;
char *pend = arr + strlen(arr) - 1;
char *pcur = NULL;
if ((arr == NULL) || (arr[0] == '\0'))
{
return;
}
reverse_str(pstart, pend); //逆序整个字符数组

while (*arr)
{
pcur = arr;
while (*arr != '\0' && * arr != ' ')
{
arr++;
}
pend = arr - 1;
reverse_str(pcur, pend);
if (*arr == ' ')
arr++;
}
}
int main()
{
char arr[] = "student a am i";
reverse(arr);
printf("%s\n", arr);
system("pause");
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: