Я пытаюсь написать функцию, которая вводит array_string и находит уникальные слова, а затем копирует их в unique_array. Это немного над моей головой. Я чувствую, что мне нужен совет, куда идти отсюда.
void unique140(string str_array[], int array_size, string unique_array[], int&unique_size)
{
int i = 0;
int j = 0;
for(i = 0; i < array_size; i++)
{
for(j = 0; j < unique_size; j++)
if (str_array[i] != unique_array[j])
{unique_array[i];}
if(str_array[i] == unique_array[j]
break;
}
Попробуйте что-нибудь вроде:
void unique140(string str_array[], int array_size,
string unique_array[], int&unique_size)
{
unordered_map<string,int> count;
for(int i=0; i<array_size; i++) {
count[str_array[i]]++;
}
unique_size = 0;
for(auto it=count.begin(); it!=count.end(); ++it) {
if(it->second==1) {
unique_array[unique_size++] = it->first;
}
}
}
используйте std :: map, если у вас нет std :: unordered_map.
Вы не в миллионе миль, циклы выглядят хорошо. Теперь вам нужно использовать эти циклы, чтобы принять решение, является ли слово str_array[i]
в unique_array
или нет? Теперь всего лишь минутная мысль сообщит вам, что str_array[i]
присутствует, если любой из тестов равенства str_array[i] == unique_array[j]
является истинным. Здесь, как кодировать, что
for(i = 0; i < array_size; i++)
{
bool in_unique_array = false;
for(j = 0; j < unique_size; j++)
if (str_array[i] == unique_array[j])
in_unique_array = true;
...
}
Затем нам нужно добавить str_array[i]
в unique_array
если он еще не существует. Так вот
for(i = 0; i < array_size; i++)
{
bool in_unique_array = false;
for(j = 0; j < unique_size; j++)
if (str_array[i] == unique_array[j])
in_unique_array = true;
if (!in_unique_array)
{
...
}
}
Наконец, решив добавить строку в unique_array
мы должны сделать это
for(i = 0; i < array_size; i++)
{
bool in_unique_array = false;
for(j = 0; j < unique_size; j++)
if (str_array[i] == unique_array[j])
in_unique_array = true;
if (!in_unique_array)
{
unique_array[unique_size] = str_array[i];
unique_size++;
}
}
present
, вы могли бы break
:)
unique
функция.