问一道面试题?" Microsoft Internet explorer CSDN OVER"--->" OVER CSDN explorer Internet Microsoft"

sunjun240 2004-11-22 02:32:13
编程实现 void* Sort(char *p) //p指向" Microsoft Internet explorer CSDN OVER"
尽量少的空间代价,不计较时间代价!
...全文
170 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyknight 2004-11-22
  • 打赏
  • 举报
回复
解释一下上面的程序:)
函数reverse是翻转字符串。

Sort的实现步骤是:
1)先将每个单词反转
2) 最后将整个字符串反转

占用的空间:
1) reverse中: char temp; int i; 一个临时做交换用的字符temp,一个做循环计数的i
2) Sort中: unsigned int i, len = 0;char *begin = p; 一个做循环计数的i, 一个记录单词长度的len, 一个存放单词起始的*begin;

不知别人是否有更好的算法
boyknight 2004-11-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

char *reverse(char *pInput, int len)
{
char temp;
int i;

for(i = 0; i < len / 2; i++)
{
temp = pInput[i];
pInput[i] = pInput[len - i -1];
pInput[len - i - 1] = temp;
}

return pInput;
}

void *Sort(char *p)
{
unsigned int i, len = 0;
char *begin = p;

for(i = 0; i <= strlen(p); i++)
{
if((p[i] == ' ')
|| (p[i] == '\0'))
{
reverse(begin, len);
begin += (len + 1);
len = 0;
continue;
}

len++;
}

reverse(p, strlen(p));
return (void *)p;
}

int main()
{
char test[100 + 1];

strcpy(test, "Microsoft Internet explorer CSDN OVER");
printf("the str is %s\n", (char *)Sort(test));

scanf("%s");
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧