字符串“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;
}
字符串“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;
}
相关文章推荐
- 看重影了?Ruby 中是如何共享字符串的
- 190_ViewPager动画
- java 生成二维码并以流形式输出显示到页面上
- No mapping found for HTTP request with URI [/HelloWeb/] in DispatcherServlet with name 'HelloWeb' Spring MVC
- Machine Learning in Action 学习笔记-(5)Logistic回归
- poj1742翻译
- Spring之IOC与DI的不同
- Jackson基础教程
- Retrofit 泛型解析遇到com.google.gson.internal.LinkedTreeMap cannot be cast to object
- 第14天内容
- 天堂还是地狱
- c++上机实验-7
- 阿里面经
- C++作业5
- handler
- I/O端口和I/O内存
- c++第七次作业
- 2016中国大学生程序设计比赛中南地区邀请赛总结
- 【Effective Java】1.静态工厂方法来替换构造函数
- C和C++中的标准输出和标准错误输出