【C语言典例】——day9:倒置字符串

※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入刷题模式。若有错误,请多多指教。

? 点赞  收藏 ?留言 都是我创作的最大的动力!


目录

※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入刷题模式。若有错误,请多多指教。

题目描述

输入

输出

题目分析

算法思路

输入要点

逆序 

 逆序函数

逆序整个字符串

 逆序每个单词

程序源码 

运行结果

​ 


 

题目描述

倒置字符串icon-default.png?t=M1L8https://www.nowcoder.com/questionTerminal/b0ae3d72444a40e2bb14af7d4cb856ba将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述:

每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

输出描述:

依次输出倒置之后的字符串,以空格分割

示例1

输入

I like beijing.

输出

beijing. like I

题目分析

算法思路

 1、对整体字符串进行逆序

 2、对每个单词再进行逆序

输入要点

不能用scanf要用gets,因为scanf不能识别空格

scanf

#include<stdio.h>
int main()
{
	char arr[100] = { 0 };

	scanf("%s", arr);
	printf("%s", arr);

	return 0;
}

 


gets 

#include<stdio.h>
int main()
{
	char arr[100] = { 0 };

	//scanf("%s", arr);
	gets(arr);

	printf("%s", arr);

	return 0;
}


粉丝:我就喜欢用scanf,偏不用gets,那就不行了吗?

小主:行,行,行。谁让你是上帝呢!

 scanf识别空格

#include<stdio.h>

int main()
{
	char arr[100] = { 0 };
	//scanf("%s", arr);
	//gets(arr);

	scanf("%[^n]", arr);
	printf("%s", arr);

	return 0;
}

逆序 

1、逆序整个字符串

2、逆序每个单词

 我们可以发现无论是逆序逆序整个字符串,还是逆序每个单词功能都是一样的,所以我们选择用一个子函数来完成。

想要逆序我们需要知道第一个字符的位置和最后一次字符的位置,

 逆序函数

void reverse(char* l, char* r)
{
	assert(l && r);//断言
	while (l < r)
	{
		char tem = *l;
		*l = *r;
		*r = tem;
		l++;
		r--;
	}

}

逆序整个字符串

用字符指针left来存放数组arr的首地址,用字符指针right来存放数组arr尾地址

right = arr +strlen(arr)-1;

注意:用strlen求输入字符的长度,不能用sizeof

        -1是因为数组的下标是从0开始的

 

	//字符串倒置
	int len = strlen(arr);
	char* left = arr;
	char* right = arr + len - 1;
	reverse(left, right);

 

 逆序每个单词

	//单词倒置
	char* cur = arr;
	char* start = arr;
	while (*cur != '')
	{
		while (*cur != '' && *cur != ' ')
				cur++;
		reverse(start, cur - 1);	//cur是空的的地址,-1才是单词最后一个字母的地址
		start = cur + 1;
		if(*cur != '')
			cur++;
	}

程序源码 

#include<stdio.h>
#include<assert.h>
void reverse(char* l, char* r)
{
	assert(l && r);//断言
	while (l < r)
	{
		char tem = *l;
		*l = *r;
		*r = tem;
		l++;
		r--;
	}

}

int main()
{
	char arr[100] = { 0 };

	//输入
	//scanf("%s", arr);
	//gets(arr);
	scanf("%[^n]", arr);

	//字符串倒置
	int len = strlen(arr);
	char* left = arr;
	char* right = arr + len - 1;
	reverse(left, right);

	//单词倒置
	char* cur = arr;
	char* start = arr;

	while (*cur != '')
	{
		while (*cur != '' && *cur != ' ')
				cur++;
		reverse(start, cur - 1);	//cur是空的的地址,-1才是单词最后一个字母的地址
		start = cur + 1;
		if(*cur != '')
			cur++;
	}

	printf("%sn", arr);

	return 0;
}

 

运行结果

 

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>