有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
student a am i
i ma a tneduts
i am a student
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
//分别设置首尾指针,运用中间变量进行字符串逆转
void SentenceReverse(char* str,int i,int j)
{
char tmp;
for (; i < j; ++i, --j)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
void reverse(char* str)
{
int i = 0;
int start = 0, end = 0;
for (i = 0; str[i]; ++i)//此循环逆转字符子串,不包括最后一个子串
{
if (str[i] == ' ')
{
end = i - 1;
SentenceReverse(str, start, end);
start = i + 1;
}
}
SentenceReverse(str, start, i-1);//此时 i 为字符数组长度(包含‘\0’)
SentenceReverse(str, 0, i - 1); //逆转整个字符串
}
int main()
{
char str[] = "student a am i";
reverse(str);
puts(str);
system("pause");
return 0;
}
运行结果: