指针练习题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博客
最后希望大家看完这篇文章后有所收获。如果大家觉得还不错的话,点赞收藏+关注(嘿嘿 )谢谢大家啦!