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

Как исправить ошибку в коде? - C++

Восстановить пароль Регистрация
 
Olegatorap
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 12
11.07.2015, 22:44     Как исправить ошибку в коде? #1
Прошу, помогите найти ошибку или подскажите, как исправить имеющийся код.
Суть задания такова:
Нам необходимо ввести список фамилий ,запросить текст из нескольких предложений, где используются ранее введенные фамилии. Откорректировать введенный текст так, чтобы с заглавной буквы были написаны только фамилии и первые слова в предложениях.

Вот код ниже у меня уже есть, но почему-то программа просто копирует мне тот же текст, заменяя первую букву в последнем предложении на букву P (а там слово Vse).

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
#include <iostream>
using namespace std;
 
void main()
{
    int kolvo = 5;
    int length = 20;
    char** studlist = new char*[kolvo];
 
    for (int i = 0; i < kolvo; i++)
    {
        studlist[i] = new char[length];
    }
 
    for (int i = 0; i < kolvo; i++)
    {
        cout << "Input student's first name: ";
        cin >> studlist[i];
    }
    system("cls");
    for (int i = 0; i < kolvo; i++)
    {
        cout << i + 1 << ". " << studlist[i] << endl;
    }
 
 
    char string[300] = { "Prepodavatel Andriyanov i Gruppa studentov: mixajlov, Zajceva, Linickij, Dovzhenko, Chudak. Sidyat na pare i delayut laby. Vse paryatsya." };
    cout << string << endl;
 
    //char upr = 'A' - 'a';
    string[0] = (char)toupper(string[0]);//; += upr;
    
     
    for (int i = 1; string[i] != '\0'; i++)
    {
        if (string[i] == '.')
        {
            string[i + 2];
            string[i + 2] = (char)toupper(string[0]);// += upr;
        }
    }
 
    char* temp = new char[length];
    bool check;
    char tmpstr[300];
    strcpy(tmpstr, string);
 
    for (int i = 0; i < kolvo; i++)
    {
        int j = 0;
        while (string[j])
        {
            temp = strtok(&string[j], " ,;:!?");
            for (int k = 0; temp[k] != '\0'; k++)
            {
                check = false;
                if (strlen(temp) == strlen(studlist[i]))
                {
                    if (temp[k] == studlist[i][k])
                    {
                        check = true;
                        if (temp[k] == '\0')
                            break;
                    }
                }
                else
                {
                    break;
                }
 
            }
            if (check)
            {
                string[j] = (char)toupper(string[j]); //tmpstr[j] += upr;
            }
            j += (strlen(temp) + 1);
            strcpy(string, tmpstr);
        }
    }
    cout << string << endl;
 
    system("pause");
    }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2015, 22:44     Как исправить ошибку в коде?
Посмотрите здесь:

не могу понять как исправить ошибку в коде C++
Исправить ошибку в коде C++
Исправить ошибку в коде с++ C++
C++ Исправить ошибку в коде
C++ исправить ошибку в коде
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Никита Однороб
107 / 87 / 13
Регистрация: 21.08.2012
Сообщений: 352
12.07.2015, 11:49     Как исправить ошибку в коде? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот рабочий вариант с использование string'ов
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
#include <iostream>
#include <string>
 
#define f(i, s, n) for(int i = s; i < n; i++)
 
using namespace std;
 
int _find(string str, string substr) {//Ищем substr в str без учета регистра
    char c;
    f(i, 0, str.length()) {
        c = str[i];
        if (c >= 'A' && c <= 'Z') str[i] = c - 'A' + 'a';
    }
    f(i, 0, substr.length()) {
        c = substr[i];
        if (c >= 'A' && c <= 'Z') substr[i] = c - 'A' + 'a'; 
    }
    return str.find(substr);
}
 
int main() {
    string names[5];
    int cnt = 5; //Кол-во имен
    f(i, 0, cnt) cin >> names[i]; //Считали имена
    
    string text = "prepodavatel Andriyanov i Gruppa studentov: mixajlov, Zajceva, Linickij, Dovzhenko, Chudak. Sidyat na pare i delayut laby. vse Paryatsya."; //Текст, который надо исправить
    
    //К нижнему регистру
    f(i, 0, text.length()) {
        char c = text[i];
        if (c >= 'A' && c <= 'Z') text[i] = c - 'A' + 'a';
    }
    
    //Сначала заменим имена
    f(i, 0, cnt) {
        int pos = _find(text, names[i]);
        if (pos > 0 && text[pos] >= 'a' && text[pos] <= 'z') text[pos] = text[pos] - 'a' + 'A';
    }
    
    //Заменяем остальные слова
    text[0] = text[0] - 'a' + 'A';
    f(i, 1, text.length()) {
        if (text[i] == '.') {
            if (text[i+1] == ' ') text[i+2] = text[i+2] - 'a' + 'A';
            else text[i+1] = text[i+1] - 'a' + 'A';
            i++;
        }
    }
    
    cout << text;
}
Olegatorap
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 12
12.07.2015, 12:46  [ТС]     Как исправить ошибку в коде? #3
Никита Однороб, это гениально
Спасибо большое

Добавлено через 40 минут
Никита Однороб, только вопрос:
А что выполняет вот эта строка:
C++
1
#define f(i, s, n) for(int i = s; i < n; i++)
И дальше там, где это используется, например:
C++
1
 f(i, 0, cnt)
Никита Однороб
107 / 87 / 13
Регистрация: 21.08.2012
Сообщений: 352
12.07.2015, 12:54     Как исправить ошибку в коде? #4
Olegatorap, это объявление макроса. Чтобы мне постоянно не писать for(int i = s; i < n; i++), я объявил макрос и пишу сокращенно f(i, s, n). А препроцессор сам заменит сокращенную форму на полную перед компиляцией
Olegatorap
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 12
12.07.2015, 12:58  [ТС]     Как исправить ошибку в коде? #5
Никита Однороб, круто) спасибо ещё раз))
Yandex
Объявления
12.07.2015, 12:58     Как исправить ошибку в коде?
Ответ Создать тему
Опции темы

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