1、有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
student a am i
i ma a tneduts
i am a student
2、程序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse_sentence(char* arr)
//翻转整个句子,自行查找句子末位处的地址,不利用strlen函数
{
char* start = arr;
char* end = arr;
//先找到数组收尾地址
while (*arr)
{
arr++;
}
arr--;
end = arr;
while (start<end)
{
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}//交换
}
void reverse_word(char* arr)//翻转单词
{
while (*arr)
{
char* word_start = arr;
char* word_end = arr;
while ((*arr != ' ') && (*arr != '\0'))
{
arr++;
}//1.通过空格或者字符串的结束符先找到单词的结束地址
//arr--;
word_end = arr;
word_end--;//2.因为存在空格,故对于翻转的单词地址需要减1
while (word_start < word_end)//3.对单词进行翻转
{
char word_temp = *word_start;
*word_start = *word_end;
*word_end = word_temp;
word_start++;
word_end--;
}
if (*arr == '\0')//4.如果当前句子里面所有单词都翻转完毕,则此时*arr=='\0',必须结束程序,否则arr++访问出问题
{
break;
}
arr++;//5.找到下一个要翻转的单词首地址
}
}
int main()
{
char arr[] = "student a am i";
printf("%s\n", arr);
reverse_sentence(arr);
printf("%s\n",arr);
reverse_word(arr);
printf("%s\n", arr);
system("pause");
return 0;
}
3、结果