我有一个字符串数组,其中的每个字符串代表给定格式的消息:
Priority#Place
%将用作定界符,向我们显示地点名称的结尾。
示例:
1#纽约%2#巴黎%3#伦敦
2#东京%1#巴黎
如您所见,优先级不必提高,并且可以使用不同的优先级多次出现位置。如果优先级为1,则该地点将获得1分。优先级2表示其价值0.6点,优先级3表示其价值0.3点。
因此,使用上面的示例,纽约将获得1点,巴黎将获得1.6点,伦敦将获得0.3点,东京将获得0.6点。
获胜者是巴黎,这是人们想要参观的最受欢迎的地方。 知道它们可以多次出现并且没有以任何顺序给出,我该如何为这些地点分配点?
我设法用%分隔符分割了字符串,现在我有了另一个字符串数组,每个字符串的位置和优先级(Priority#Place)。使用前面的示例,我有:
1#纽约
2#巴黎
3#伦敦
2#东京
1#巴黎
但是,由于一个地点发生了多次,因此我不确定如何确定其总价值。我计划制作一个数组来保存每个字符串的值(例如,巴黎是索引1,检查字符串中的第一个字符并添加0.6点,因为它的优先级是2),但是稍后我会遇到一个问题,因为巴黎出现了再次在第4个索引处分配值,并在第4个索引处再分配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]);
}
这是将字符串添加到字符串数组的代码部分。效果很好,我只需要下一步的帮助,因为如果一个地点在同一列表中出现多次,那么我会加点。