2015-12-28 2 views
0

Для школы C++ lab (с использованием Microsoft Visual Studio, следовательно, система («пауза»)) Я делаю программу, которая позволит пользователю вводить адрес электронной почты, и программа выплюнет имя пользователя (до «@») и типа сайта, либо тип, основанный на последних трех буквах адреса (com - это коммерческие предприятия), либо код последней двухбуквенной страны (мы - Соединенные Штаты).фатальная ошибка в использовании вектора

#include <iostream> 
#include <string> 

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); 
    string lastthree; 
    for (int i = 0; i < 3; i++) 
    { 
     lastthree[i] = email[truesize - i]; 
    } 
    cout << "Site type: "; 
    if (lastthree == "edu") 
     cout << "Educational institutions"; 
    if (lastthree == "org") 
     cout << "Not-for-profit organizations"; 
    if (lastthree == "gov") 
     cout << "Government entities"; 
    if (lastthree == "mil") 
     cout << "Military installations"; 
    if (lastthree == "net") 
     cout << "Network service providers"; 
    if (lastthree == "com") 
     cout << "Commercial ventures"; 
    if (email[truesize - 2] == '.') 
     cout << "Country Code " << email[truesize - 1] << email[truesize]; 
} 

Когда я запускаю код, он выплевывает имя пользователя, но при поиске типа сайта возникает фатальная ошибка. Я думаю, что это связано с неправильным использованием строки? Любая помощь оценивается.

Ошибка отладки!

Программа: C: \ Windows \ System32 \ MSVCP140D.dll Файл: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ Include \ xstring Line: 1681

Выражение: строка из индексного диапазона

Для получения дополнительной информации о том, как ваша программа может вызывать ошибку , см. документацию Visual C++ в отношении утверждений.

(Нажмите Retry для отладки приложения)

+0

К сожалению, неправильно название! Я хотел сказать «фатальная ошибка при использовании строки» – e7kim

+0

См. Изменения ниже. Приветствия. – ChrisD

ответ

1

Есть пару вещей, которые не так с вашим кодом, (1), чтобы получить длину строки, используйте длину () функции, так:

int truesize = size(email); 

должен быть

int truesize = email.length(); 

Я изменил ваш если заявления на еще IfS becaus e, если одно из операторов условия оценивает значение true, нам не нужно проверять остальную часть.

(2) ваш цикл является захват расширение электронной почты в обратном направлении, изменение:

for (int i = 0; i < 3; i++) 
{ 
    lastthree[i] = email[truesize - i]; 
} 

к

lastthree = email.substr(truesize-3, truesize);