添加逗号问题

1.现在需要将其转换为千分位格式,即从整数最低位开始,每三位数字插入一个英文逗号,以提高可读性。例如,对于123456789,转换后为 123,456,789。也就是说从后往前只要够三个字符就增加一个英文逗号,怎么才能从后往前数呢,这个是时候就需要逆序字符串,就可以得到从前往后面数三个数据 ,增加一个变量count用来计数,只要能被三整除就将这个位置后面的所有元素都像后面挪动,然后将这个位置增加英文逗号,然后让指针跳过这个英文逗号继续像后面找,直到找到'\0',增添完成以后再将字符串逆序一下,打印出来就可以了,最坏的时间复杂度应该是O(n^2),每次到三个都要进去循环,效率不高。只是用了几个常量级的临时变量,空间复杂度是常量级

复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
void reverse(char* str)//逆序字符串
{
	assert(str);//断言一下因为后面会解引用,对空指针的解引用很危险
	int len = strlen(str);
	char* left = str;
	char* right = str + len - 1;
	while (right>left)//两个指针分别向后面寻找
	{
		char temp = *right;
		*right = *left;
		*left = temp;
		left++;
		right--;
	}
}
int main()
{
	//输入一个字符串,然后将这个字符串逆序,逆序后从前向后遍历,找到三个就添加一个,其他是字符后移
	char str[100] = { 0 };
	scanf("%s", str);
	reverse(str);//先逆序
	int count = 0;
	char* temp = str;
	while (*temp)//*为假说明已经到字符串末尾了
	{

		if (count % 3 == 0&&count!=0)
		{
			int len = strlen(str);//每次进来都要重新计算因为添加进去的有英文逗号
			char* rear = str+len;//再创建一个变量,字符从后面开始挪动
			while (rear!=temp)
			{
				*rear = *(rear - 1);//减到temp,把temp空起来
				rear--;
			}
			*temp = ',';//把英文逗号赋值过去
			temp++;//跳过这个英文逗号
		}
		count++;//计数
		temp++;//当前字符的位置
	}
	reverse(str);
	printf("%s",str);
	return 0;
}
相关推荐
小肝一下38 分钟前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
延凡科技14 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
皓月斯语20 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
春日见20 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
萌动的小火苗21 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索21 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana221 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
星恒随风21 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
txzrxz21 小时前
单调队列讲解
数据结构·c++·算法·单调队列