《C语言入门》倒置字符串之单词倒置

目录

1.问题描述

2.问题求解及代码实现

1.问题描述

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

题目牛客网链接倒置字符串__牛客网 (nowcoder.com)

2.问题求解及代码实现

将一个字符串逆序我想应该难不倒大家,但本题要求为将单词进行倒置,而单词顺序不倒置,这时候传统的逆序方法就满足不了我们的需求,这里我们想到下面的算法解决这个问题。

以 I love China. 为例,我们先以空格为间隔,将每个单词倒置。这样便得到了I evol .anihC

然后我们再对整个字符串进行倒置,我们便可得到我们想要的结果China. love I

 Ok方法介绍完了下面介绍代码如何实现,首先我们需要一个倒置字符串的函数,这个函数有很多种方法,这里为了本题方便,我们使用指针的方法来实现。下面是具体代码:

void reverse(char *left,char*right)
{

	char tmp = 0;
	while (left < right)
	{
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

有了这个函数后,接下来的难点是如何以空格为界限将每个单词逆序,我们创建两个指针start和end,在*end!=' '时,end++,直到*end=' '时,我们将start和end-1作为参数调用上述倒置函数,再对start和end重新赋值,直到end为'\0'为止。注意!!!我们对end++时也要注意end是否为\0,否则可能会出现意想不到的错误。再对每个单词倒置之后我们再对整个字符串进行倒置,最后就能打印出我们想要的结果。下面是完整代码:

void reverse(char *left,char*right)
{

	char tmp = 0;
	while (left < right)
	{
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char s[100] = { 0 };
	gets(s);
	int len = strlen(s);
	char* start = s;
	char* end = start;
	while (*end != '\0')
	{
		while (*end != ' ' && *end != '\0')
		{
			end++;
		}
		reverse(start, end-1);
		if (*end == '\0')
			start = end;
		else
			start = end + 1;

		end = start;
	}
	reverse(s, s+len-1);
	printf("%s", s);
	return 0;
}

本文到此结束,感谢大家的阅读,欢迎点赞评论互关,祝大家万事如意。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值