首页 > 解决方案 > 计算文件中有多少这个词,但其中有很多要分开

问题描述

我想计算在程序中输入了多少个国家,并在上面最多显示 3 个,就像这样

美国,美国,英国,英国,加拿大,加拿大,南公园

结果是Three of countries that have most number are USA,UK,Canada例如

但问题是我需要为世界上每个国家/地区创建 char 和 int (如果您有更好的想法,您也可以告诉我,但我只是一个初学者,所以请向我解释或显示最终代码以了解它)像这样

#include <stdio.h>
#include <string.h>
int main()
{
    char * countrylist [] = {"Laotian / Lao","Afghanistan","Albania","Algeria","Andorra","Angola","Antigua and Barbuda","Argentina","Armenia","Australia"
                             ,"Austria","Austrian Empire","Azerbaijan","Baden","Bahamas","Bahrain","Bangladesh","Barbados","Bavaria","Belarus","Belgium","Belize","Benin","Bolivia"
                             ,"Bosnia and Herzegovina","Botswana","Brazil","Brunei","Brunswick and Luneburg","Bulgaria","Burkina Faso","Upper Volta","Burma","Burundi","Cabo Verde"
                             ,"Cambodia","Cameroon","Canada","Cayman Islands","Central African Republic","Central American Federation","Chad","Chile","China","Colombia","Comoros"
                             ,"Congo Free State","Costa Rica","Cote dIvoire","Ivory Coast","Croatia","Cuba","Cyprus","Czechia","Czechoslovakia","Democratic Republic of the Congo"
                             ,"Denmark","Djibouti","Dominica","Dominican Republic","Duchy of Parma","East Germany","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea"
                             ,"Estonia","Eswatini","Ethiopia","Federal Government of Germany","Fiji","Finland","France","Gabon","Gambia","Georgia","Germany","Ghana","Grand Duchy of Tuscany"
                             ,"Greece","Grenada","Guatemala","Guinea","Guinea Bissau","Guyana","Haiti","Hanover","Hanseatic Republics","Hawaii","Hesse","Holy See","Honduras","Hungary"
                             ,"Iceland","India","Indonesia","Iran","Iraq","Ireland","Israel","Italy","Jamaica","Japan","Jordan","Kazakhstan","Kenya","Kingdom of Serbia","Kingdom of Yugoslavia"
                             ,"Kiribati","Korea","Kosovo","Kuwait","Kyrgyzstan","Latvia","Lebanon","Lesotho","Lew Chew","Loochoo","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg"
                             ,"Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Mauritania","Mauritius","Mecklenburg Schwerin","Mecklenburg Strelitz","Mexico"
                             ,"Micronesia","Moldova","Monaco","Mongolia","Montenegro","Morocco","Mozambique","Namibia","Nassau","Nauru","Nepal","Netherlands","New Zealand","Nicaragua","Niger"
                             ,"Nigeria","North German Confederation","North German Union","North Macedonia","Norway","Oldenburg","Oman","Orange Free State","Pakistan","Palau","Panama","Papal States"
                             ,"Papua New Guinea","Paraguay","Peru","Philippines","Piedmont Sardinia","Poland","Portugal","Qatar","Republic of Genoa","Republic of Korea","South Korea","Republic of the Congo"
                             ,"Romania","Russia","Rwanda","Saint Kitts and Nevis","Saint Lucia","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia"
                             ,"Schaumburg Lippe","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Sudan","Spain"
                             ,"Sri Lanka","Sudan","Suriname","Sweden","Switzerland","Syria","Tajikistan","Tanzania","Texas","Thailand","Timor Leste","Togo","Tonga","Trinidad and Tobago","Tunisia","Turkey"
                             ,"Turkmenistan","Tuvalu","Two Sicilies","Uganda","Ukraine","Union of Soviet Socialist Republics","United Arab Emirates","United Kingdom","Uruguay","Uzbekistan","Vanuatu"
                             ,"Venezuela","Vietnam","Wurttemberg","Yemen","Zambia","Zimbabwe"
                            };

    int Afghanistan=0,Albania=0,Algeria=0,Andorra=0,Angola=0,AntiguaandBarbuda=0,Argentina=0,Armenia=0,Australia=0,Austria=0,AustrianEmpire=0,Azerbaijan=0,Baden=0,Bahamas=0,Bahrain=0,Bangladesh=0,Barbados=0,Bavaria=0,Belarus=0,Belgium=0,Belize=0,Benin=0,
                                         Dahomey=0,Bolivia=0,BosniaandHerzegovina=0,Botswana=0,Brazil=0,Brunei=0,BrunswickandLuneburg=0,Bulgaria=0,BurkinaFaso=0,UpperVolta=0,Burma=0,Burundi=0,CaboVerde=0,Cambodia=0,Cameroon=0,Canada=0,CaymanIslands=0,CentralAfricanRepublic=0,CentralAmericanFederation=0,
                                         Chad=0,Chile=0,China=0,Colombia=0,Comoros=0,CongoFreeState=0,CostaRica=0,CotedIvoire=0,IvoryCoast=0,Croatia=0,Cuba=0,Cyprus=0,Czechia=0,Czechoslovakia=0,DemocraticRepublicoftheCongo=0,Denmark=0,Djibouti=0,Dominica=0,DominicanRepublic=0,DuchyofParma=0,
                                         EastGermany=0,GermanDemocraticRepublic=0,Ecuador=0,Egypt=0,ElSalvador=0,EquatorialGuinea=0,Eritrea=0,Estonia=0,Eswatini=0,Ethiopia=0,FederalGovernmentofGermany=0,Fiji=0,Finland=0,France=0,Gabon=0,Gambia=0,Georgia=0,Germany=0,Ghana=0,GrandDuchyofTuscany=0,
                                         Greece=0,Grenada=0,Guatemala=0,Guinea=0,GuineaBissau=0,Guyana=0,Haiti=0,Hanover=0,HanseaticRepublics=0,Hawaii=0,Hesse=0,HolySee=0,Honduras=0,Hungary=0,Iceland=0,India=0,Indonesia=0,Iran=0,Iraq=0,Ireland=0,Israel=0,Italy=0,Jamaica=0,Japan=0,Jordan=0,Kazakhstan=0,Kenya=0,KingdomofSerbia=0,KingdomofYugoslavia=0,
                                         Kiribati=0,Korea=0,Kosovo=0,Kuwait=0,Kyrgyzstan=0,Laos=0,Latvia=0,Lebanon=0,Lesotho=0,LewChew=0,Loochoo=0,Liberia=0,Libya=0,Liechtenstein=0,Lithuania=0,Luxembourg=0,Madagascar=0,Malawi=0,Malaysia=0,Maldives=0,Mali=0,Malta=0,MarshallIslands=0,Mauritania=0,Mauritius=0,MecklenburgSchwerin=0,MecklenburgStrelitz=0,
                                         Mexico=0,Micronesia=0,Moldova=0,Monaco=0,Mongolia=0,Montenegro=0,Morocco=0,Mozambique=0,Namibia=0,Nassau=0,Nauru=0,Nepal=0,Netherlands=0,NewZealand=0,Nicaragua=0,Niger=0,Nigeria=0,NorthGermanConfederation=0,NorthGermanUnion=0,NorthMacedonia=0,Norway=0,Oldenburg=0,Oman=0,OrangeFreeState=0,Pakistan=0,Palau=0,
                                         Panama=0,PapalStates=0,PapuaNewGuinea=0,Paraguay=0,Peru=0,Philippines=0,PiedmontSardinia=0,Poland=0,Portugal=0,Qatar=0,RepublicofGenoa=0,RepublicofKorea=0,SouthKorea=0,RepublicoftheCongo=0,Romania=0,Russia=0,Rwanda=0,SaintKittsandNevis=0,SaintLucia=0,SaintVincentandtheGrenadines=0,Samoa=0,
                                         SanMarino=0,SaoTomeandPrincipe=0,SaudiArabia=0,SchaumburgLippe=0,Senegal=0,Serbia=0,Seychelles=0,SierraLeone=0,Singapore=0,Slovakia=0,Slovenia=0,SolomonIslands=0,Somalia=0,SouthAfrica=0,SouthSudan=0,Spain=0,SriLanka=0,Sudan=0,Suriname=0,Sweden=0,Switzerland=0,Syria=0,Tajikistan=0,Tanzania=0,Texas=0,Thailand=0,
                                             TimorLeste=0,Togo=0,Tonga=0,TrinidadandTobago=0,Tunisia=0,Turkey=0,Turkmenistan=0,Tuvalu=0,TwoSicilies=0,Uganda=0,Ukraine=0,UnionofSovietSocialistRepublics=0,UnitedArabEmirates=0,UnitedKingdom=0,Uruguay=0,Uzbekistan=0,Vanuatu=0,Venezuela=0,Vietnam=0,Wurttemberg=0,Yemen=0,Zambia=0,Zimbabwe=0;



        char * s []= {"Thailand","ab"};

        int lencountry = sizeof(countrylist)/sizeof(countrylist[0]);
        int lenprovince = sizeof(s)/sizeof(s[0]);

        for(int i = 0; i < lencountry; ++i)
        {
            for(int j=0; j<lenprovince; j++)
            {
                if(!strcmp(countrylist[i], s[j]))
                {
                    //I think I need to show do int++ here but I don't know how to do it
                    //maybe know the location of countrylist[i] and make the program know 
                    //where to add 1 to int

                }
            }
        }
}

但这只是我的想法和尝试做的,但我的技能还不够,如果你能告诉我怎么做,请告诉我,如果你有能力做到,请告诉我怎么做。

非常感谢每一个帮助我的人。

标签: arrayscautomatic-ref-counting

解决方案


你绝对不应该为每个国家使用单一变量。而是使用数组。这可以以多种方式完成:

  1. 使用与您的姓名列表匹配的 VLA:
    ...
    int lencountry = sizeof(countrylist)/sizeof(countrylist[0]);
    int countrycounts[lencountry];    // VLA cannot be initialized
    for (int i = 0; i<lencountry; i++)
    {
       countrycounts[i] = 0;
    }

然后您可以简单地增加该数组中的相应索引:

    if(!strcmp(countrylist[i], s[j]))
    {
      countrycounts[i]++;
    }
  1. 使用结构并将计数器与名称一起存储。
typedef struct {
  const char *name;
  int         count;
} country_t;

country_t countrylist[] = {
  { .name = "Laotian / Lao"},
  { .name = "Afghanistan"},
  { .name = "Albania"},
  ...
  { .name = "Zambia"},
  { .name = "Zimbabwe"}
};

count如果未指定所有字段,则结构中的其余字段(此处为:)将自动初始化为 0。

然后你可以这样比较:

    if(!strcmp(countrylist[i].name, s[j]))
    {
      countrylist[i].count++;
    }

推荐阅读