У меня есть массив строк, где каждая строка в массиве представляет сообщение в заданном формате:
# Priority Place
% будет использоваться в качестве разделителя, показывая нам, где заканчивается название места.
Пример:
1 # Нью-Йорк% 2 # Париж% 3 # Лондон
2 # Tokyo% 1 # Париж
Как видите, приоритет не должен быть восходящим, и места могут встречаться более одного раза с другим приоритетом. Если приоритет равен 1, место будет стоить 1 балл. Приоритет 2 означает, что он стоит 0,6 балла, а приоритет 3 - 0,3 балла.
Таким образом, используя приведенный выше пример, Нью-Йорк будет стоить 1 балл, Париж - 1,6 балла, Лондон - 0,3 балла, а Токио - 0,6 балла.
Победителем стал Париж, который является самым популярным местом, которое люди хотят посетить.
Как я могу присваивать очки местам, зная, что они могут встречаться более одного раза и не даются ни в каком порядке?
Мне удалось разделить строки с помощью разделителя%, и теперь у меня есть еще один массив строк с местом и приоритетом (Priority # Place) для каждой строки. Используя предыдущий пример, у меня есть:
1 # Нью-Йорк
2 # Париж
3 # London
2 # Tokyo
1 # Париж
Однако, поскольку место встречается не раз, я не уверен, как определить его общую стоимость. Я планировал создать массив, который будет содержать значения для каждой строки (например, Париж - это индекс 1, проверьте первый символ в строке и добавьте 0,6 точки, потому что его приоритет равен 2), но позже у меня возникнет проблема, потому что появляется Париж снова в 4-м индексе, и присвоение значения в 4-м индексе еще один 1 пункт не очень поможет, так как мне нужно было бы назначить его для 1-го индекса.
temp=strtok(lista[j], "%");
if(temp!=NULL)
{
strcpy(mjesto[kol], temp);
kol++;
temp=strtok(NULL, "%");
if(temp!=NULL)
{
strcpy(mjesto[kol], temp);
kol++;
temp=strtok(NULL, "%");
if(temp!=NULL)
{
strcpy(mjesto[kol], temp);
kol++;
temp=strtok(NULL, "%");
}
}
}
for(j=0; j<kol; j++)
{
strcpy(tempMjesta[j], mjesto[j]);
}
for(j=0; j<kol; j++)
{
mjestoKon[j]=strtok(mjesto[j], "#");
mjestoKon[j]=strtok(NULL, "\0");
}
for(j = 0; j < kol; j++)
{
for(k = j+1; k < kol; )
{
if(strcmp(mjestoKon[k], mjestoKon[j])==0)
{
for(g = k; g < kol; g++)
{
strcpy(mjestoKon[g], mjestoKon[g+1]);
}
kol--;
}
else
{
k++;
}
}
}
for(k=0; k<kol; k++)
printf(">>> %s \n", mjestoKon[k]);
for(j=0; j<kol; j++)
{
strcpy(mjesto[j], tempMjesta[j]);
}
Это часть кода, которая добавляет строки в массив строк. Это отлично работает, мне просто нужна помощь в следующем шаге, так как я застрял при добавлении точек, если место встречается более одного раза в одном и том же списке.