C語言 深入淺出講解指針的使用
一、利用指針倒序字符串
void _reversal(char* left, char* right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
通過上述代碼不難看出,left與right分別代表一個字符數(shù)組的首端和尾端,通過中間變量 tmp進(jìn)行首尾交換,left++中的left是char*類型,同時也可以看成為一維數(shù)組left[ i++],因此,移動的原理就是通過++移向下一個元素位置所在的地址right同理可得是移向上一個元素位置所在的地址。

二、題目實例
對于一個較大的整數(shù) N(1<=N<=2,000,000,000)
比如 980364535,我們常常需要一位一位數(shù)這個數(shù)字是幾位數(shù),但是如果在這個數(shù) 字每三位加一個逗號,它會變得更加易于朗讀。因此,這個數(shù)字加上逗號成如下的 模樣:980,364,535請寫一個程序幫她完成這件事情
輸入描述:
一行一個整數(shù) N
輸出描述:
一行一個字符串表示添加完逗號的結(jié)果
#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);
//翻轉(zhuǎn)字符串
_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);
//翻轉(zhuǎn)字符串
_reversal(arr2, arr2 + len1 - 1);
if (arr2[0] == ',')
{
char* arr3 = arr2 + 1;
printf("%s", arr3);
}
else
{
printf("%s", arr2);
}
return 0;
}
就本題而言,為什么我們在插入的時候需要進(jìn)行倒序呢,通過觀察我們發(fā)現(xiàn),插入的方式是從個位開始的,因此,從邏輯上我們需要將它進(jìn)行倒序來滿足這個基本原理,不然可能會出現(xiàn)最后兩個數(shù)(或者是一個數(shù))前面會有逗號產(chǎn)生,這是規(guī)則不允許的。
三、總結(jié)
對于這個題本身而言,方法不止一種,通過這道題的解法,目的就是可以 更好的理解通過指針如何逆序字符串加深對指針的了解,希望對大家有所 幫助,同時也希望小伙伴們指出不足之處,相互改進(jìn),共同進(jìn)步。
到此這篇關(guān)于C語言 深入淺出講解指針的使用的文章就介紹到這了,更多相關(guān)C語言 指針的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)中堆排序的分析總結(jié)
堆是計算機科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將通過圖片詳細(xì)介紹堆排序,需要的可以參考一下2022-04-04
基于Windows C++ 應(yīng)用程序通用日志組件的使用詳解
眾所周知,在調(diào)試、跟蹤和執(zhí)行應(yīng)用程序的過程中,程序的日志能為這些工作提供大量有價值的運行信息。因此,程序的日志對應(yīng)用程序的運行、維護至關(guān)重要2013-05-05

