今天看了一道面试题,题目如下:
一个字符数组的内容为:“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;
}