这是我的代码,它从文件中读取结构。
int _tmain(int argc, _TCHAR* argv[])
{
typedef struct
{
char name_1[100];
char Max_1[100];
char Min_1[100];
} power_line_name;
int numLines;
StreamReader ^ sr1=File::OpenText("testcpp\\test\\powerline.txt");
while(sr1->ReadLine())
{
numLines++;
}
power_line_name* power_list=new power_line_name[numLines];
//power_line_name power_list[5];
StreamReader ^ sr=File::OpenText("testcpp\\test\\powerline.txt");
array<System::String ^> ^power_line;
array<System::String ^> ^d_line;
String ^ eachString;
String ^ eachString_2;
String ^ eachString_3;
int i=0;
char nstring[100];
try
{
String^ s="";
while (s=sr->ReadLine())
{
power_line=s->Split(':');
Console::WriteLine(s);
d_line=power_line[1]->Split('|');
for(int a=0;a<d_line->Length;a++)
{
pin_ptr<const wchar_t> wch = PtrToStringChars(d_line[a]);
size_t origsize = wcslen(wch) + 1;
size_t convertedChars = 0;
if(a==0)
{
wcstombs_s(&convertedChars, power_list[i].name_1, origsize, wch, _TRUNCATE);
strcat_s(power_list[i].name_1, " (char *)");
}
if(a==1)
{
wcstombs_s(&convertedChars, power_list[i].Max_1, origsize, wch, _TRUNCATE);
strcat_s(power_list[i].Max_1, " (char *)");
}
if(a==2)
{
wcstombs_s(&convertedChars, power_list[i].Min_1, origsize, wch, _TRUNCATE);
strcat_s(power_list[i].Min_1, " (char *)");
}
}
i++;
}
Console::WriteLine(s);
}
finally
{
if(sr)
delete (IDisposable^)(sr);
}
return 0;
}
这是它的输出:
power_list[0].name_1=aaaa power_list[0].Max_1=1111111 power_list[0].Min_1=222222 power_list[1].name_1=aaaa power_list[1].Max_1=333333 power_list[1].Min_1=444444 power_list[2].name_1=aaaa power_list[2].Max_1=333333 power_list[2].Min_1=444444 power_list[3].name_1=aaaa power_list[3].Max_1=33333 power_list[3].Min_1=66666
如果Max_1
和Min_1
对于某些两个元素相同,我希望删除第二个元素。
所以新的输出将是:
power_list[0].name_1=aaaa power_list[0].Max_1=1111111 power_list[0].Min_1=222222 power_list[1].name_1=aaaa power_list[1].Max_1=333333 power_list[1].Min_1=444444 power_list[2].name_1=aaaa power_list[2].Max_1=33333 power_list[2].Min_1=66666
我不知道该怎么办?
答案 0 :(得分:0)
我不熟悉c ++ - cli语法,所以这是一种方法,用伪代码:
for i from 0 to n-1
for j from i+1 to n-1
if list[i].Max_1 == list[j].Max_1 and list[i].Min_1 == list[j].Min_1
mark j as duplicate
for i from 0 to n-1
if i is not marked duplicate
output i
这似乎是最简单的方法。
另一种更复杂的方法:对数组进行排序;那么所有重复的条目都将相邻,这将使比较更容易。也许其他人会在另一个答案中描述这一点。