题解 | #句子逆序#
句子逆序
http://www.nowcoder.com/practice/48b3cb4e3c694d9da5526e6255bb73c3
#include<stdio.h>
int main()
{
char string[1000] = { 0 }; //输入字符串
char val[1000] = { 0 }; //输出字符串
int length; //输入字符串长度
int k = 0; //统计遇到空格前有了几个单词,它们占了几个字节数
scanf("%[^\n]", string);
length = strlen(string);
int p = length; //记录每次遇到空格时的位置,初始化位置是句尾
for (int i = length - 1; i >= 0; i--) //从句子末尾开始扫
{
if (string[i] == 32) //如果检测到空格(空格的ASCII码为32)
{
for (int j = 0; j < p - i - 1; j++)//赋值给val数组,以输出
{
val[j+k] = string[i + 1 + j];
val[j + k + 1] = 32; //赋空格,确保这个单词输出完,与下一个单词之间有空格隔开
}
k += p - i; //k:每输出完一个单词,就加上这个 单词及一个空格 的字节长度
p = i; //移到,遇到空格的位置,开始下一个单词
}
}
for (int i = 0; i < p; i++)//因为第一个单词前没有空格了,所以需要补充输出
{
val[k + i] = string[i];
}
printf("%s\n", val);
}
