题解 | #句子逆序#
方法一——原地逆置
思路:如例一 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:打印最后一个空格前的字符串,也即直接打印源字符串;