For a school lab I have to take in an email input and output the username before '@' and the site type. The site type is either the last three letters of the address (com for commercial ventures, edu for educational institutions, etc) or the last two letters that are abbreviations of the country (us for united states, etc). When dealing with two letter country code site types, I inFile a text file (countries.txt) that has each country code with its respective country in each line. I have finished my code but when I run my code and inputting an email with a three letter site type (com, org, etc) it works fine. But when I run my code and input an email with a two letter site type at the end that abbreviates for a country code, I get a fatal string error. I have tried looking everywhere in my else if loop that is called upon when dealing with the two letter country code email address, but I cannot find when I am going out of bounds with the string. Any help is appreciated!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <vector>
using namespace std;
void getemail(string &email);
void finduser(string email);
void findsitetype(string email);
int main()
{
string email;
getemail(email);
finduser(email);
findsitetype(email);
system("pause");
return 0;
}
void getemail(string &email)
{
cout << "Please enter your email address: ";
cin >> email;
cout << endl;
}
void finduser(string email)
{
int index = email.find('@');
cout << "Username: ";
for (int i = 0; i < index; i++)
cout << email[i];
cout << endl << endl;
}
void findsitetype(string email)
{
int truesize = size(email) - 1, i = 0;
string lastthree, countrycode;
vector<string> countries;
lastthree.resize(3);
for (int i = 0; i < 3; i++)
{
lastthree[i] = email[truesize - (2 - i)];
}
cout << "Site type: ";
if (lastthree == "edu")
cout << "Educational institutions";
else if (lastthree == "org")
cout << "Not-for-profit organizations";
else if (lastthree == "gov")
cout << "Government entities";
else if (lastthree == "mil")
cout << "Military installations";
else if (lastthree == "net")
cout << "Network service providers";
else if (lastthree == "com")
cout << "Commercial ventures";
else if (email[truesize - 2] == '.') //Source of my error seems to be in this else if loop.
{
countrycode[0] = email[truesize - 1];
countrycode[1] = email[truesize];
ifstream inFile("countries.txt");
if (inFile.fail())
{
cout << "File not found.";
exit(1);
}
else
{
while (getline(inFile, countries[i]))
{
getline(inFile, countries[i]);
i = i + 1;
}
inFile.close();
for (int j = 0; j < countries.size(); j++)
{
string line = countries[j];
string country;
if (line.find(countrycode) != -1)
{
int index = line.find(countrycode);
cout << "Country ";
for (int k = 5; k < line.size(); k++)
{
cout << line[k];
}
}
}
}
}
}
| |
The text file I include:
countries.txt (file name)
ac : Ascension Island
ad : Andorra
ae : United Arab Emirates
af : Afghanistan
ag : Antigua and Barbuda
ai : Anguilla
al : Albania
am : Armenia
an : Netherlands Antilles
ao : Angola
aq : Antarctica
ar : Argentina
as : American Samoa
at : Austria
au : Australia
aw : Aruba
ax : Aland Islands
az : Azerbaijan
ba : Bosnia and Herzegovina
bb : Barbados
bd : Bangladesh
be : Belgium
bf : Burkina Faso
bg : Bulgaria
bh : Bahrain
bi : Burundi
bj : Benin
bm : Bermuda
bn : Brunei Darussalam
bo : Bolivia
br : Brazil
bs : Bahamas
bt : Bhutan
bv : Bouvet Island
bw : Botswana
by : Belarus
bz : Belize
ca : Canada
cc : Cocos (Keeling) Islands
cd : Congo, Democratic Republic
cf : Central African Republic
cg : Congo
ch : Switzerland
ci : Cote D'Ivoire (Ivory Coast)
ck : Cook Islands
cl : Chile
cm : Cameroon
cn : China
co : Colombia
cr : Costa Rica
cs : Czechoslovakia (former)
cu : Cuba
cv : Cape Verde
cx : Christmas Island
cy : Cyprus
cz : Czech Republic
de : Germany
dj : Djibouti
dk : Denmark
dm : Dominica
do : Dominican Republic
dz : Algeria
ec : Ecuador
ee : Estonia
eg : Egypt
eh : Western Sahara
er : Eritrea
es : Spain
et : Ethiopia
eu : European Union
fi : Finland
fj : Fiji
fk : Falkland Islands (Malvinas)
fm : Micronesia
fo : Faroe Islands
fr : France
fx : France, Metropolitan
ga : Gabon
gb : Great Britain (UK)
gd : Grenada
ge : Georgia
gf : French Guiana
gg : Guernsey
gh : Ghana
gi : Gibraltar
gl : Greenland
gm : Gambia
gn : Guinea
gp : Guadeloupe
gq : Equatorial Guinea
gr : Greece
gs : S. Georgia and S. Sandwich Isls.
gt : Guatemala
gu : Guam
gw : Guinea-Bissau
gy : Guyana
hk : Hong Kong
hm : Heard and McDonald Islands
hn : Honduras
hr : Croatia (Hrvatska)
ht : Haiti
hu : Hungary
id : Indonesia
ie : Ireland
il : Israel
im : Isle of Man
in : India
io : British Indian Ocean Territory
iq : Iraq
ir : Iran
is : Iceland
it : Italy
je : Jersey
jm : Jamaica
jo : Jordan
jp : Japan
ke : Kenya
kg : Kyrgyzstan
kh : Cambodia
ki : Kiribati
km : Comoros
kn : Saint Kitts and Nevis
kp : Korea (North)
kr : Korea (South)
kw : Kuwait
ky : Cayman Islands
kz : Kazakhstan
la : Laos
lb : Lebanon
lc : Saint Lucia
li : Liechtenstein
lk : Sri Lanka
lr : Liberia
ls : Lesotho
lt : Lithuania
lu : Luxembourg
lv : Latvia
ly : Libya
ma : Morocco
mc : Monaco
md : Moldova
me : Montenegro
mg : Madagascar
mh : Marshall Islands
mk : F.Y.R.O.M. (Macedonia)
ml : Mali
mm : Myanmar
mn : Mongolia
mo : Macau
mp : Northern Mariana Islands
mq : Martinique
mr : Mauritania
ms : Montserrat
mt : Malta
mu : Mauritius
mv : Maldives
mw : Malawi
mx : Mexico
my : Malaysia
mz : Mozambique
na : Namibia
nc : New Caledonia
ne : Niger
nf : Norfolk Island
ng : Nigeria
ni : Nicaragua
nl : Netherlands
no : Norway
np : Nepal
nr : Nauru
nt : Neutral Zone
nu : Niue
nz : New Zealand (Aotearoa)
om : Oman
pa : Panama
pe : Peru
pf : French Polynesia
pg : Papua New Guinea
ph : Philippines
pk : Pakistan
pl : Poland
pm : St. Pierre and Miquelon
pn : Pitcairn
pr : Puerto Rico
ps : Palestinian Territory, Occupied
pt : Portugal
pw : Palau
py : Paraguay
qa : Qatar
re : Reunion
ro : Romania
rs : Serbia
ru : Russian Federation
rw : Rwanda
sa : Saudi Arabia
sb : Solomon Islands
sc : Seychelles
sd : Sudan
se : Sweden
sg : Singapore
sh : St. Helena
si : Slovenia
sj : Svalbard & Jan Mayen Islands
sk : Slovak Republic
sl : Sierra Leone
sm : San Marino
sn : Senegal
so : Somalia
sr : Suriname
st : Sao Tome and Principe
su : USSR (former)
sv : El Salvador
sy : Syria
sz : Swaziland
tc : Turks and Caicos Islands
td : Chad
tf : French Southern Territories
tg : Togo
th : Thailand
tj : Tajikistan
tk : Tokelau
tm : Turkmenistan
tn : Tunisia
to : Tonga
tp : East Timor
tr : Turkey
tt : Trinidad and Tobago
tv : Tuvalu
tw : Taiwan
tz : Tanzania
ua : Ukraine
ug : Uganda
uk : United Kingdom
um : US Minor Outlying Islands
us : United States
uy : Uruguay
uz : Uzbekistan
va : Vatican City State (Holy See)
vc : Saint Vincent & the Grenadines
ve : Venezuela
vg : British Virgin Islands
vi : Virgin Islands (U.S.)
vn : Viet Nam
vu : Vanuatu
wf : Wallis and Futuna Islands
ws : Samoa
xk : Kosovo*
ye : Yemen
yt : Mayotte
yu : Serbia and Montenegro (former)
za : South Africa
zm : Zambia
zw : Zimbabwe