Форум программистов, компьютерный форум CyberForum.ru

Проверка корректности введенного города игра "Города" - C++

Восстановить пароль Регистрация
 
Katerinka
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 5
17.06.2014, 07:15     Проверка корректности введенного города игра "Города" #1
Здравствуйте, пишу программку "Города", т.е. пользователь называет какой-нибудь город, допустим, "Омск". Компьютер считывает последнюю букву и на нее осуществляет поиск города в векторе (города туда записываются из файла) и выдает этот город, предварительно записав его в "использованные". Все подфункции работают, единственная проблема с проверкой: следует проверить, ввел ли пользователь город на последнюю букву слова компьютера или он ввел просто левый город. Не получается придумать, как это реализовать.

C++
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using namespace std;
struct city {// структура под города пользователя
    char *gorod;
    bool used;
    city(const char* g, bool u) {
        if (g == NULL || strlen(g) == 0)
            cout << "Не верно введен город!\n";
        else {
            gorod = new char[strlen(g) + 1];
            strcpy(gorod, g);
            gorod[strlen(gorod)] = 0;
            used=u;
        }
    }
    ~city() {
        if (gorod != NULL) delete[] gorod;
    }
 
};
 
int FileRead (char* fileName, vector <city*> &vse_goroda) {
    FILE* f;//для хранения всех городов
    f=fopen(fileName, "r"); // FILE -- тип переменной "Файл". fopen -- функция открытия файла для чтения ("r"), перезаписи ("w"),
    if (f == NULL) 
    {
        cout << "Файл не найден " <<fileName<< endl;
        return 0;
    }
    else {
        char* bufCity = new char[50];
        while (fscanf(f, "%s ", bufCity) == 1) {
            vse_goroda.push_back(new city(bufCity, false));
        }
        delete[] bufCity;
    }
    fclose(f);// Закрываем файл.
    return 0;
};
 
bool provCity (char* userCity, vector <city*> &vse_goroda){
    bool znach=false;
    for (int i = 0; i < vse_goroda.size(); i++)
    {
        if (strcmp(vse_goroda.at(i)->gorod, userCity) == 0 &&!vse_goroda.at(i)->used)
        {
            vse_goroda.at(i)->used=true;
            znach=true;
            break;
        }
    }
    return znach;
}
 
char posl_Symvol (char* userCity, vector <city*> &vse_goroda)
{
    char symvol_pos=0;
    for (int i=0; i<strlen(userCity); i++)//возвращает кол-во симвлов в массиве если выполнится оператор sizeof(string), ответ будет 100, а если — функция strlen(string), ответ 6.
    {
        symvol_pos=userCity[strlen(userCity)-1];//проверяем посл букву слова пользователя
 
        if (symvol_pos=='ь'|| symvol_pos=='ы'|| symvol_pos=='й'|| symvol_pos=='ъ')
        { 
            symvol_pos=userCity[strlen(userCity)-2];
        }
    }
    return symvol_pos;
}
 
 
char* findCity_firstSymbol (char symvol_per, vector <city*> &vse_goroda) {
    char* res=0;
    char symvol_perBig=toupper((unsigned char)symvol_per);
    for (int i=0; i<vse_goroda.size(); i++)//возвращает количество элементов в векторе, перебираем все города вектора
    {
        if ((vse_goroda.at(i)->gorod[0] == symvol_perBig) && !vse_goroda.at(i)->used)
        {
            vse_goroda.at(i)->used=true;
            res=vse_goroda.at(i)->gorod;
            break;
        }
    }
    return res;
}
 
int main () {
    setlocale(LC_ALL, "");// включаем в консоли русский язык
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    vector <city*> vse_goroda;
    char* userCity = new char[255]; 
    char symvol_pos=0;
    char symvol_per=0;
    bool znach;
    char* fileName ="E:\\goroda.txt";// строка для хранения имени файла 
    FileRead(fileName, vse_goroda);
    char* compCity;
    printf("Пожалуйста, введите город: \n");
    while(true)
    {
        scanf("%s", userCity);// считывание города пользователя
        if (provCity (userCity,vse_goroda)==true)
        {
            symvol_pos=posl_Symvol(userCity,vse_goroda);// ход компьютера
            compCity=findCity_firstSymbol(symvol_pos,vse_goroda);
            if (compCity!=0)
            {
                cout<<compCity<<"\nВаш ход!"<<endl;
            }
            else 
            {
                cout<<"Вы выиграли!"<<endl;
                system ("pause");
                break;
            }
        }
        else cout<<"Такого города нет в РФ и странах СНГ или его уже называли!"<<endl;
    }
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 07:15     Проверка корректности введенного города игра "Города"
Посмотрите здесь:

игра в города C++
Игра "Города" C++
Игра в города C++
Игра города C++
C++ Задача "Города и дороги"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
17.06.2014, 07:57     Проверка корректности введенного города игра "Города" #2
Katerinka, заведите переменную last, которая будет хранить последнее слово, использованное в игре. Если последняя буква last равна первой букве введенного слова. значит все в порядке
Katerinka
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 5
17.06.2014, 08:10  [ТС]     Проверка корректности введенного города игра "Города" #3
Хедин, и вставить данную проверку перед проверкой использования города? Программка не заходит в цикл после первой итерации, т.к. первое слово слово пользователя не с чем сравнить. Не могли бы вы подробнее объяснить как и куда?

Добавлено через 4 минуты
и вставить данную проверку перед проверкой использования города? Программка не заходит в цикл после первой итерации, т.к. первое слово слово пользователя не с чем сравнить. Не могли бы вы подробнее объяснить как и куда?
SlavaSSU
213 / 158 / 44
Регистрация: 17.07.2012
Сообщений: 580
17.06.2014, 08:26     Проверка корректности введенного города игра "Города" #4
заводишь счетчик int cnt = 0(сколько ходов сделано, изначально ноль). если ходов было ноль, то город может начинаться на любую букву, иначе он должен начинаться на последнюю букву последнего слова. после каждого успешного хода делаешь cnt++.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
17.06.2014, 18:03     Проверка корректности введенного города игра "Города" #5
Katerinka, будет как то так...

Добавлено через 8 минут
Katerinka, будет как то так...
string lastWord = "";
а ввод слова будет какой то вот такой:
string userWord;
C++
1
2
3
4
5
do
{
    cin >> userWord;
}
while (lastWord.length() != 0 && lastWord[lastWord.length()-1] != userWord[userWord.length()-1]);
идея этого куска: требовать ввод слова от пользователя, пока последнее слово не равно нулю и последняя буква последнего слова не равна последней букве введенного слова. Если это первый шаг и слова еще нет, то первое же условие не выполнится и программа выйдет из цикла
Katerinka
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 5
17.06.2014, 19:51  [ТС]     Проверка корректности введенного города игра "Города" #6
да, спасибо большое, я уже сделала, цикл - это тема!) Теперь проблема в том, что города составные (из 2 слов, например) не читаются...вместо Нижний Новгород просто Нижний. Вот сижу снова голову ломаю.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
17.06.2014, 20:00     Проверка корректности введенного города игра "Города" #7
Katerinka, ну тут либо используете функцию getline, которая читает строку с пробелами... либо идем на некоторые костыли и пишем все названия с подчеркиванием вместо пробелов, типа Нижний_Новгород
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 20:01     Проверка корректности введенного города игра "Города"
Еще ссылки по теме:

Игра в города C++
C++ Игра "Города" по сети
Игра "Города" в С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SlavaSSU
213 / 158 / 44
Регистрация: 17.07.2012
Сообщений: 580
17.06.2014, 20:01     Проверка корректности введенного города игра "Города" #8
string word;
cin >> word; // на некоторых компиляторах читает строку до первого пробела, при этом перевод строки не считывается!!
getline(cin, word); //читает всю строчку, включая перевод строки
Yandex
Объявления
17.06.2014, 20:01     Проверка корректности введенного города игра "Города"
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru