日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言?深入淺出講解指針的使用_C 語言

作者:Fighting陽! ? 更新時間: 2022-06-01 編程語言

一、利用指針倒序字符串

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

輸出描述:

一行一個字符串表示添加完逗號的結果

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

就本題而言,為什么我們在插入的時候需要進行倒序呢,通過觀察我們發現,插入的方式是從個位開始的,因此,從邏輯上我們需要將它進行倒序來滿足這個基本原理,不然可能會出現最后兩個數(或者是一個數)前面會有逗號產生,這是規則不允許的。

三、總結

對于這個題本身而言,方法不止一種,通過這道題的解法,目的就是可以 更好的理解通過指針如何逆序字符串加深對指針的了解,希望對大家有所 幫助,同時也希望小伙伴們指出不足之處,相互改進,共同進步。

原文鏈接:https://blog.csdn.net/NEFUT/article/details/123680249

相關推薦

欄目分類
最近更新