我正在尝试在main之外编写一个函数,该函数扫描字符串数组中的重复值,而不使用任何c ++库函数和重复值到空字符串""
我用来测试的数组是
string duplicates[7] = { "apple", "bear", "apple", "daddy", "bear", "daddy", "sunny" };
然而它无法正常工作,因为它没有完全删除所有重复的值。
int Duplicaters(string arr[], int a)
{
int a = updatenewsize;
string str;
for(int i = 0; i < size; i++)
{
str = arr[i];
for(int j = i + 1; j <= updatenewsize; j++)
{
if(arr[j] == str)
{
for(int k = j; k <= size - 1; k++) ///< size - 1 for "removal"
{
arr[k] = arr[k + 1];
}
updatenewsize--; ///< update the size after we "removed"
}
}
}
return updatenewsize;
}
答案 0 :(得分:0)
使用空字符串替换重复项后,您将在Sheets("Sheets2").Range("G3:G100").Copy
Sheets("Sheets2").Activate
Sheets("Sheets2").Range("A1").Offset(0, l - 1).PasteSpecial xlPasteValues`
进一步计算"" == ""
个重复项。你应该在cout中看到它。
我不会分配空字符串,而是交换i
和array[j]
并递减array[n - 1]
。
答案 1 :(得分:0)
首先要做的事情。你不能删除&#34;数组中的值。根据定义,数组是固定大小的。您可以做的是覆盖重复值并将唯一值移到左侧。你这样做是为了跟踪数组的新大小应该是什么(在内存中它仍然是相同的大小,但出于实际目的,我们不再关心最后的东西)。我希望你不要介意用变量名清理一些。我这样做是为了明确意图。该函数将返回&#34; new&#34;的大小。具有唯一值的数组。
int removeDuplicatedValues(string array[], int size)
{
int newsize = size;
string str;
for(int i = 0; i < size; i++)
{
str = array[i];
// note that we increment until j < newsize here because
// we are "shrinking" the array on every match!
for(int j = i + 1; j < newsize; j++)
{
if(array[j] == str) ///< we found a match
{
for(int k = j; k < size - 1; k++) ///< size - 1 for "removal"
{
array[k] = array[k + 1]; ///< shift everybody else down
}
newsize--; ///< update the size after we "removed"
}
}
}
return newsize;
}
你会像这样使用它。数组现在应该只打印出唯一的字符串,我们几乎缩小了数组的大小,只是我们关心的元素。
int main()
{
string duplicates[7] = { "apple", "bear", "apple", "daddy", "bear", "daddy", "sunny" };
int length = removeDuplicatedValues(duplicates, 7);
for (int i = 0; i < length; i++)
{
std::cout << duplicates[i] << " ";
}
std::cout << std::endl;
return 0;
}
此快速测试的输出类似于
apple bear daddy sunny
如果你想知道有多少重复你被删除&#34;在这一点上,你可以通过简单的数学运算来完成。由于您知道固定大小(在本例中为7
)并且从我们的函数返回的length
变量具有唯一元素的数量。
int duplicates = 7 - length; ///< how many duplicates did we have?
答案 2 :(得分:0)
您可以使用此代码。
#include <iostream>
#include <string.h>
using namespace std;
string* arrayNew;
int arrayNewSize=0;
string *removeDuplicatedValues(string *array, int arraySize)
{
int duplicatecounter = 0;
string empty = "";
for (int i = 0; i < arraySize; i++)
{
string s = array[i];
for (int j = i + 1; j < arraySize; j++){
if (array[j] == s)
{
array[j] = empty;
}
}
if(array[i]!=empty){
arrayNewSize++;
}
}
arrayNew = new string[arrayNewSize];
int k=0;
for (int j = 0; j < arraySize; j++){
if(array[j]!=empty){
arrayNew[k++]=array[j];
}
}
return arrayNew;
}
int main () {
string duplicates[] = {"apple","bear","apple","daddy","bear","daddy","sunny"};
int arraySize = (sizeof(duplicates) / sizeof(string));
string* finalArrayP;
finalArrayP=removeDuplicatedValues(duplicates,arraySize);
for (int i = 0; i < arrayNewSize; i++){
cout << "newarray[i] is " << finalArrayP[i] << endl;
}
delete [] arrayNew;
return 0;
}