C语言实现倒置字符串

一,题目要求

题目描述:将一句话的单词进行倒置,标点不倒置。比如 "I like beijing.",经过处理后变为:"beijing. like I"。 字符串长度不超过100。

输入描述:输入一个仅包含小写字母、空格、'.' 的字符串,长度不超过100。 '.' 只出现在最后一个单词的末尾。

输出描述:依次输出倒置之后的字符串,以空格分割。 补充说明:

示例:输入:I like beijing.   输出:beijing. like I

二,解题思路

逆序整个字符串 ,再逆序每个单词。

代码实现:

void reverse(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

int main()
{
	char arr[101];
	/*scanf("%s", arr);
	printf("%s", arr);
	scanf遇到空格就不能接收了*/

    gets(arr);  //读取一个字符串,即使有空格
	int len = strlen(arr);
	reverse(arr, arr + len - 1);

	char* start = arr;
	char* cur = arr;
	while (*cur)
	{
		while (*cur != '\0' && *cur != ' ')
		{
			cur++;
		}
		reverse(start, cur - 1);
		start = cur + 1;
		if (*cur == ' ')
			cur++;
	}
	printf("%s", arr);
	return 0;
}

1. 首先定义一个字符数组arr, 用gets库函数读取一个字符串存入arr中。

2. 逆序整个字符串:定义一个reverse函数,参数是一个是数组首元素地址,另一个是数组最后一个元素地址,可以用首地址+长度-1计算得来。写一个while循环,当左边小于右边地址时,交换左右两边地址所指的值,直到不满足条件。

3. 逆序每一个单词:首先定义两个指针cur和start指向首元素,考虑内层循环,当cur所指向的元素不是\0或者空格时,cur向后移动一次。直到cur指向空格,此时便用reverse函数逆序这个单词。逆序之后,start=cur+1。即指向了下一个单词的首字母,如果cur指向的是空格,cur++,cur就和start一样。同样指向下一个单词的首字母。这样就实现了一个单词的逆序。而外层循环,如果cur没有指向\0,继续循环,这样就实现了多个单词的逆序,直到遇到\0,结束循环。

这样就实现了字符串单词的逆序。

图示:

 

结果如下:

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值