[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。

指针练习题2
题目:字符串逆序
内容与要求:使用指针,写一个函数,可以逆序一个字符串的内容。

举例:
输入: I Love You.
输出: .uoY evoL I
 
输入: abc
输出: cba

实现代码:

#include 
#include 

int My_strlen(char* s)
{
	//求长度 指针减指针的方法求长度
	char* start = s;
	while (*s != '\0')
	{
		s++;
	}
	return  s - start;
}
int main()
{
	int i = 0;
	//创建字符数组
	char arr[1000];
	//使用gets函数输入字符串
	gets(arr);
	//用指针求字符串长度
	int len = My_strlen(arr);
	//逆序打印字符串
	char* p = arr+len-1;//最后元素的地址
	for (i = 0; i < len; i++)
	{
		putchar(*(p - i));
	}
	return 0;
}
 

代码分析:

[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第1张图片

首先在内存开辟一块字符数组空间,这里使用gets函数输入我们可以通过MSDN查询了解一下gets函数的使用方法和相关注意事项。

[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第2张图片

 我们可以看到:

The gets function reads a line from the standard input stream stdin and stores it in buffer. The line consists of all characters up to and including the first newline character ('\n'). gets then replaces the newline character with a null character ('\0') before returning the line. In contrast, the fgets function retains the newline character. _getws is a wide-character version of gets; its argument and return value are wide-character strings.
[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第3张图片

我们可以知道gets函数可以读取字符串,并且是读到 '\n'。

当我们当得知这些之后,我们就可以对代码进行分析:

逆序字符串的原理:

使用指针将给定字符串中的每个字符由后向前依次打印,因此我们首先要取到字符数组中最后一个字符的地址,我们知道,指针是默认读取数组首元素的地址,因此我们可以使用指针减指针的方法来计算字符串的长度,再进行指针加减运算即可获得最后一个字符的地址。

[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第4张图片

这里我们自定义函数My_strlen,函数的方法我们使用指针减指针的方法求出字符串的长度

 [C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第5张图片

这样我们就可以取到最后一个元素的地址

char* p = arr+len-1;//最后元素的地址

 最后在循环打印出字符串就得到了我们最后的结果。

测试:

输入: abc
输出: cba

[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第6张图片

输入: I Love You.
输出: .uoY evoL I

[C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。_第7张图片

 总结:

本篇文章通过使用指针解决了字符串的逆序输出问题,使用了指针减指针的方法求出了未知字符串的长度,最后如果有对指针的概念或者简单运算还有不太清楚地小伙伴,可以访问下面这条链接(初始指针)。

[ C语言 ] 还不懂指针的一定要进来,带你初始指针,简单使用指针,它没有你想的那么难。_小白又菜的博客-CSDN博客

最后希望大家看完这篇文章后有所收获。如果大家觉得还不错的话,点赞收藏+关注(嘿嘿 )谢谢大家啦!

你可能感兴趣的:(c语言,练习题,蓝桥杯)