题解 | #句子逆序#
方法一——原地逆置
思路:如例一 I am a boy
step1: 逆序整个字符串,yob a ma I
step2: 遍历字符串,将空格之前的字符串逆序,boy a am I
step3:逆序最后一个空格后的字符串,boy a am I
void reverse(char* p, int x, int y)
{
while (x < y)
{
char temp = *(p + x);
*(p + x) = *(p + y);
*(p + y) = temp;
x++;
y--;
}
}
int main()
{
char ch[1000] = { 0 };
gets(ch);
reverse(ch, 0, strlen(ch) - 1);
int i = 0, j = 0;
for (; i <= strlen(ch); i++)
{
if (ch[i] == ' ' || ch[i] == '\0')
{
reverse(ch, j, i - 1);
j = i + 1;
}
}
puts(ch);
return 0;
}
方法二——直接打印
思路:如例一 I am a boy
step1:从后向前遍历,将空格后的字符串直接打印,然后将空格位置赋值为字符'\0';
step2:打印最后一个空格前的字符串,也即直接打印源字符串;
