我在這裏看到一個較舊的帖子,詢問如何做相同的事情,但他們的方法是不同的,我很想知道我的程序中的漏洞。刪除數組中的重複項(C++)
我正在嘗試編寫一個接受字符到10個字符長度數組的程序。我希望程序通過識別一個重複項並將其右側的所有值移動到左邊一個來評估第一個數組位置並刪除稍後在數組中找到的任何重複項。陣列的'大小'然後減1。
我相信我用於刪除函數的邏輯是正確的,但程序只爲數組中的第一個值和第四個值打印'a'。
任何幫助將不勝感激,這裏是我的代碼:
#include <iostream>
using namespace std;
int letter_entry_print(int size, char array[10]);
int delete_repeats(int& size, char array[10]);
int final_array_print(int size, char array[10]);
int main()
{
char array[10];
int size = 10;
letter_entry_print(size,array);
delete_repeats(size,array);
final_array_print(size,array);
cout<<"\n";
system("pause");
}
int letter_entry_print(int size, char array[10])
{
int i;
for (i=0;i<size;i++)
{
cout << "Enter letter #" << i+1 << endl;
cin >> array[i];
cout << "\n";
}
cout << "\nYour array index is as follows:\n\n";
for (i=0;i<size;i++)
{
cout << array[i];
cout << " ";
}
cout <<"\n\n";
return 0;
}
int delete_repeats(int& size, char array[10])
{
int ans;
int loc;
int search;
int replace;
char target='a';
cout << "Enter 1 to delete repeats.\n\n";
cin >> ans;
if(ans==1)
{
for(loc=0;loc<size;loc++)
{
array[loc]=target;
for(search=1;search<(size-loc);search++)
{
if(target=array[loc+search])
{
for(replace=0;replace<(size-(loc+search));replace++)
{
array[loc+search+replace]=array[loc+search+replace+1];
array[size-1]=0;
size=(size-1);
}
}
}
}
}else(cout<<"\nWhy didn't you press 1?\n\n");
return 0;
}
int final_array_print(int size, char array[10])
{
cout<<"\nYour new index is as follows:\n\n";
int i;
for(i=0;i<size;i++)
{
cout<<array[i];
cout<<" ";
}
cout<<"\n";
return 0;
}
'if(target = array [loc + search])'你確定要在這裏做一個任務嗎?我認爲你應該使用'=='運算符。使用std :: string和STL算法,這可以更容易完成。 – Mahesh
如何使用['std :: unique'](http://stdcxx.apache.org/doc/stdlibref/unique.html)? –