如何根据其加权值排名确定字符串的优先级?

时间:2019-01-04 16:08:19

标签: c

我有一个字符串数组,其中的每个字符串代表给定格式的消息:

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]);
}

这是将字符串添加到字符串数组的代码部分。效果很好,我只需要下一步的帮助,因为如果一个地点在同一列表中出现多次,那么我会加点。

0 个答案:

没有答案