arrays - 计算文件中有多少这个词,但其中有很多要分开
问题描述
我想计算在程序中输入了多少个国家,并在上面最多显示 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
}
}
}
}
但这只是我的想法和尝试做的,但我的技能还不够,如果你能告诉我怎么做,请告诉我,如果你有能力做到,请告诉我怎么做。
非常感谢每一个帮助我的人。
解决方案
你绝对不应该为每个国家使用单一变量。而是使用数组。这可以以多种方式完成:
- 使用与您的姓名列表匹配的 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]++;
}
- 使用结构并将计数器与名称一起存储。
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++;
}
推荐阅读
- r - 在 ggplot2 中设置 x 轴限制 -> 添加另一条回归线时,x 轴上的数字消失
- android - Android Studio 在模拟器设计中出现错误无法正常工作
- java - java.lang.NullPointerException:将当前日期分配给变量时为空
- php - PHP 从正常运行时间获取日期
- log4j - 如何在空手道中禁用场景明智的日志生成
- c# - 我无法设置自定义属性 Unity PUN 2
- reactjs - 设置自动完成关闭不适用于“redux-form”中的字段
- sql - 根据另一个表从一个表中拆分时间条目
- r - 在R中将数字转换为字符串,同时保留尾随零/负号
- java - Spring boot 从属性文件中获取所有属性并加载到哈希图中