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

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

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

实现代码:

#include <stdio.h>
#include <string.h>

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;
}
 

代码分析:

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

 我们可以看到:

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.

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

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

逆序字符串的原理:

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

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

 

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

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

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

测试:

输入: abc
输出: cba

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

 总结:

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

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

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

  • 23
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白又菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值