曾经面试遇到这样一道C语言题:给定一个字符串,把单词倒序,但是单词本身保持不变。要求不能使用库函数,时间复杂性为O(n), 空间复杂性为O(1)。
#include <stdio.h>
int strlen(char *str)
{
int len = 0;
while (str[len] != '/0')
len++;
return len;
}
void str_reverse(char *str, int start, int end)
{
char ch;
while(start < end)
{
ch = str[start];
str[start] = str[end];
str[end] = ch;
start++;
end--;
}
return;
}
void swap_string(char *str)
{
int i, j, len;
len = strlen(str);
str_reverse(str, 0, len-1);
i = 0;
j = 0;
while (str[i] != '/0')
{
while(str[j] != ' ' && str[j] != '/0')
j++;
str_reverse(str, i, j-1);
if (str[j] == '/0')
break;
j++;
i = j;
}
return;
}
int main(int argc, char *argv[])
{
char *str = argv[1];
printf("%s/n", str);
swap_string(str);
printf("%s/n", str);
}