欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言删除二维数组的重复数据的一个方法

程序员文章站 2022-06-11 14:36:40
...

C语言删除二维数组的重复数据的一个方法

//以下头文件,未及清理
#include "stdafx.h"
#include <vector>
#include <string>
#include <time.h>
#include <tchar.h>
#include <conio.h>	
	
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"  
#include <iostream>
using namespace std;

//删除重复记录 方法:采用逆序循环,从表格的最 (尾-1) 行 开始逆序查找。
//首先对比 (尾-1)与(尾)行,如果重复则删除 (尾)行;
//再次对比 (尾-2)与(尾-1)行,以此类推……
//逆序查找的方法,一次循环即可完成删除重复的工作。
//删除数据的方法 – 用空地址履盖的方法。
//代码示例如下:

if (true)
{
	//操作的二维数组 --  new_AllTrade_pArr
	int		do_lines		= new_AllTrade_lines;									//数组的行数
	int		do_columns		= new_AllTrade_columns;									//数组的列数 固定值 消除windows 带来的乱字符
	
	char*	start_data1 = { 0 };													//设置对比列,同时对比两列 
	char*	start_data2 = { 0 };
	char*	sour1 = { 0 };															//移动取值列
	char*	sour2 = { 0 };
	int		delete_count = 0;														//删除行数 计数器
	int		found_line = MAX_LINES;													//是否重复? 行号
	for (int last_line = do_lines - 2; last_line > 0; last_line = last_line - 1)	//逆序以删除连续重复 !!!
	{
		found_line = MAX_LINES;														//计数器 初值
		start_data1 = new_AllTrade_pArr[last_line][NEWPARR_TRADE_ORDERCOUNT];
		start_data2 = new_AllTrade_pArr[last_line][NEWPARR_TRADE_TIME];

		for (int i = last_line + 1; i < do_lines - delete_count; i++)				//查找重复,行号给计数器  lineNum_remain
		{
			sour1 = new_AllTrade_pArr[i][NEWPARR_TRADE_ORDERCOUNT];
			sour2 = new_AllTrade_pArr[i][NEWPARR_TRADE_TIME];
			if (strcmp(start_data1, sour1) == 0 && strcmp(start_data2, sour2) == 0)
			{
				found_line = i;														//找到重叠的行号

				//开始删除
				for (found_line; found_line < do_lines; found_line++)
				{
					for (int j = 0; j < do_columns; j++)
					{
						new_AllTrade_pArr[found_line][j] = new_AllTrade_pArr[found_line + 1][j];	//全部数据前移 1 行
					};
				};
				++delete_count;															//删除的计数器,删除之外再计数
			}
		};
	};
	do_lines = do_lines - delete_count;													//更新行数
	new_AllTrade_lines = do_lines;
};//完成
相关标签: C/C++语言 c++