一、利用指针倒序字符串
1
2
3
4
5
6
7
8
9
10
11
|
void _reversal( char * left, char * right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } |
通过上述代码不难看出,left与right分别代表一个字符数组的首端和尾端,通过中间变量 tmp进行首尾交换,left++中的left是char*类型,同时也可以看成为一维数组left[ i++],因此,移动的原理就是通过++移向下一个元素位置所在的地址right同理可得是移向上一个元素位置所在的地址。
二、题目实例
对于一个较大的整数 N(1<=N<=2,000,000,000)
比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这个数 字每三位加一个逗号,它会变得更加易于朗读。因此,这个数字加上逗号成如下的 模样:980,364,535请写一个程序帮她完成这件事情
输入描述:
一行一个整数 N
输出描述:
一行一个字符串表示添加完逗号的结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> void _reversal( char * left, char * right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr1[2000] = { 0 }; gets_s(arr1); int len = strlen (arr1); //翻转字符串 _reversal(arr1, arr1 + len - 1); char arr2[2000] = { 0 }; char * pr1 = arr1; char * pr2 = arr2; int i = 0; while (i <= len / 3 + 1) { pr2[0] = pr1[0]; pr2[1] = pr1[1]; pr2[2] = pr1[2]; pr2[3] = ',' ; pr1 += 3; pr2 += 4; i++; } int len1 = strlen (arr2); //翻转字符串 _reversal(arr2, arr2 + len1 - 1); if (arr2[0] == ',' ) { char * arr3 = arr2 + 1; printf ( "%s" , arr3); } else { printf ( "%s" , arr2); } return 0; } |
就本题而言,为什么我们在插入的时候需要进行倒序呢,通过观察我们发现,插入的方式是从个位开始的,因此,从逻辑上我们需要将它进行倒序来满足这个基本原理,不然可能会出现最后两个数(或者是一个数)前面会有逗号产生,这是规则不允许的。
三、总结
对于这个题本身而言,方法不止一种,通过这道题的解法,目的就是可以 更好的理解通过指针如何逆序字符串加深对指针的了解,希望对大家有所 帮助,同时也希望小伙伴们指出不足之处,相互改进,共同进步。
到此这篇关于C语言 深入浅出讲解指针的使用的文章就介绍到这了,更多相关C语言 指针的使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/NEFUT/article/details/123680249