C语言指针实战:倒序字符串与数字千分位格式化

小石头
小石头
发布时间:2026-10-16 | 6人浏览过
原创

通过实际代码案例,详细讲解C语言指针如何用于字符串倒序排列,并解决大数按三位加逗号的分隔符插入问题。

一、利用指针实现字符串倒序

在使用指针操作字符数组时,最常用的场景之一是反转字符串。其核心逻辑是利用两个分别指向首部和尾部的指针,相向而行并进行内容交换。

以下是实现该功能的C语言代码:

void _reversal(char* left, char* right)
{
  while (left < right)
  {
	  char tmp = *left;
	  *left = *right;
	  *right = tmp;
	  left++;
	  right--;
  }
}

在上述实现中:left 和 right 分别作为首尾指针。left++ 使左指针按字节(char类型)向后移动至下一个元素的地址,right-- 则向前移动。这种双指针法不仅能高效完成逆序,也直观展示了C语言指针基于内存地址偏移的原理。

二、实战:大数每三位加逗号

在处理较大的整数(例如 980364535)时,为了便于朗读和阅读,通常需要将其格式化为每三位数字用逗号分隔的形式(如 980,364,535)。虽然可以先转为字符串处理,但利用指针的移动可以清晰地体现算法逻辑。

题目要求

  • 输入:一行包含一个整数 N(1 ≤ N ≤ 2,000,000,000)。
  • 输出:添加了千分位分隔符后的字符串。

解题思路

直接正序插入逗号较为繁琐,因为从个位开始每三位就需要加一个符号。更巧妙的做法是:

  1. 第一次倒序:将读取到的字符串原地反转,这样原本位于末尾的数字变成了最前面的位置。
  2. 拼接逗号:使用新指针每次取三个字符,并在其后追加一个逗号,写入新的缓冲区。
  3. 第二次倒序:再次将拼接好的长串字符串反转回来,恢复正确的从左到右的顺序。
  4. 移除头尾标点:检查生成的字符串开头是否为逗号,若是则跳过该字符输出。

完整代码示例

#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] == ',')
	{
		// 如果第一个字符是逗号,直接从第二个字符开始打印
		printf("%s", arr2 + 1);
	}
	else
	{
		// 否则正常打印
		printf("%s", arr2);
	}
	return 0;
}

三、总结

通过这道题可以看出,C语言的指针不仅可以指向变量,还能像游标一样对内存块进行步进式(+=3)读写。倒序字符串不仅是理解指针运算的基础,在处理这类需要“逆向思维”或“分段重组”的问题时,往往能起到化繁为简的作用。熟练掌握 *ptr 访问、ptr++ 移位以及多步倒序的组合技巧,是深入理解C语言底层数据操作的必经之路。

以上就是C语言指针倒序字符串与千分位格式化处理的详细内容,更多关于C语言指针进阶应用资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表