题解 | #句子逆序#

方法一——原地逆置
思路如例一  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:打印最后一个空格前的字符串,也即直接打印源字符串;
int main()
{
    char ch[1000] = { 0 };
    gets(ch);
    int i;
    for (i = strlen(ch) - 1; i >= 0; i--)
    {
        if (ch[i] == ' ')
        {
            printf("%s", &ch[i + 1]);
            ch[i] = '\0';
            printf(" ");
        }
    }
    printf("%s", ch);
    return 0;
}
该题库类似题目:HJ31--单词倒排 链接


全部评论

相关推荐

去哪儿内推高管:头像放到正中间,文字环绕图像
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务