今天看了一道面试题,题目如下:

一个字符数组的内容为:“student a am i”,将数组的内容反转为:“i am a student”,不借助任和库函数。

因为字符串反转以前就做过,所以这道题就比较简单了,在字符串反转的基础上再逐个反转单词。

思路:总体上现将整个字符串反转,然后定位到每一个单词对其进行反转。

程序最重要的事过程要清晰,所以我将其分为3个函数来写,程序代码如下:

#include<stdio.h>

#include<stdlib.h>

#include<assert.h>

#include<string.h>

/*两个字符进行交换*/

void swap(char* a, char* b)

{

assert(a != NULL && b != NULL);

char tmp = *a;

*a = *b;

*b = tmp;

}

/*整个字符串反转*/

void str_reverse(char *begin,char *end)

{

assert(begin != NULL && end != NULL);

while (begin < end)

{

swap(begin, end);

begin++;

end--;

}

}

/*各个单词反转函数*/

void reverse(char *s)

{

assert(s != NULL);

char *begin = s;

char *end = begin;

for (; *end != '\0'; end++)

;

end--;

str_reverse(begin, end);

begin = s;

end = begin;

char* wordend = NULL;

do

{

if (*end == ' ' || *end == '\0')

{

wordend = end - 1;

str_reverse(begin, wordend);

begin = end;

while (*begin =='\0'||*begin==' ')

begin++;

}

end++;

} while (*(end - 1) != '0');

}

int main()

{

char s[] = "student a am i";

reverse(s);

printf("%s", s);

system("pause");

return 0;


}