Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 30.05.2017
Сообщений: 63
1

Ошибка в алгоритме проверки строки

13.04.2018, 17:13. Просмотров 509. Ответов 1
Метки нет (Все метки)

Проверяю строку на корректность, все работает нормально, кроме одной вещи. Сделал алгоритм для удаления лишних пробелов. Если введенная строка имеет 20 или меньше символов - все нормально работает. Если она больше 20 - строка в конце заполняется разными непонятными символами.

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
void control_name_car()
{ int i, j, dl1, kol_s, n;
  char second_str[19];
  cout << endl << endl;
  metka_car:
     renter.name_car[0] = '\0'; 
     cout << "Введите название автомобиля(не более 20 символов): ";
     fflush(stdin);
     gets(renter.name_car);
     if(renter.name_car[0] == '\0')
       { red; //#define red SetConsoleTextAttribute(hConsole, (WORD) ((0<<4)|12)) - это меняет цвет текста в консоли, аналогично с остальными цветами
         puts("Ошибка! Попробуйте еще раз!");
         gray;
         goto metka_car;
       }
     if(renter.name_car[0] == ' ')
         { red;
           puts("Ошибка! Попробуйте еще раз!");
           gray;
           goto metka_car;
         }
     if(strlen(renter.name_car) > 20)
       renter.name_car[20] = '\0';
     dl1 = strlen(renter.name_car);
     for(i = 0; i < dl1; i ++)
        if(!(isalnum(renter.name_car[i]) || renter.name_car[i] == ' '))
          { red;
            puts("Ошибка! Попробуйте еще раз!");
            gray;
            goto metka_car;
         }
     renter.name_car[0] = toupper(renter.name_car[0]);
    //удаление лишних пробелов
         kol_s = 0;
     second_str[0] = '\0';
     n = 0;
     for(i = 0; i < dl1; i ++)
        { if(renter.name_car[i] == ' ')
            { kol_s ++;
              if(kol_s == 1)
                { second_str[n] = ' ';
                  n ++;
                }
            }
          else
            { kol_s = 0;
              second_str[n] = renter.name_car[i];
              n ++;
            }
        }
     renter.name_car[0] = '\0';
     strcpy(renter.name_car, second_str);
     renter.name_car[25] = '\0';
     puts(renter.name_car); 
     
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2018, 17:13
Ответы с готовыми решениями:

Принцип работы рекурсии в алгоритме проверки палиндрома
Имеется не большой код на проверку слова(является ли оно палиндромом).Немного не понимаю,как...

Ошибка в программе проверки значения строки
Прошу помощи. Нужно исправить код, чтобы если пользователь вводил list, программа выводила da. ...

Где ошибка в коде проверки длины строки?
Всем привет) Не могу понять, в чем ошибка в коде. Все правильно сделал, а оно мне ошибку выдает. ...

Ошибка в алгоритме
В общем есть две меняющиеся величины одна постоянно растущая - аа, а другая - с имеет два значения...

1
435 / 362 / 324
Регистрация: 05.11.2013
Сообщений: 1,026
Записей в блоге: 6
13.04.2018, 18:52 2
напиши нормальную функцию для удаления лишних разделителей из строки char * и вызывай её, например

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
#include <cstdio>
#include <cctype>
 
char *trim(char* output,char* input) {
    int inputIndex = 0;
    int outputIndex = 0;
    while (isspace(input[inputIndex])) inputIndex++;
    while (input[inputIndex]) {
        output[outputIndex] = input[inputIndex];
        if (isspace(input[inputIndex])) {
            while(isspace(input[inputIndex + 1])) {
                inputIndex++;
            }
        }
        outputIndex++;
        inputIndex++;
    }
    output[outputIndex] = '\0';
    return output;
}
 
int main() {
    char input[] = "  2    \t\nasfa sas    f f dgdgd  dg   ggg  \t";
    char output[100];
    trim(output,input);
 
    puts ("Input string");
    puts(input);
    puts ("Output string");
    puts(output);
 
    getchar(); return 0;
}
это если не использовать библиотеку алгоритмов
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2018, 18:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка в алгоритме
В метании молота состязается n спортcменов. Каждый из них сделал m бросков. Побеждает спортсмен, у...

Ошибка в алгоритме
Есть такое задание: Напишите алгоритм, который для одномерного массива с четным количеством...

Ошибка в алгоритме
Неправильно работает программа есть сетка (координаты x - в векторе A y - в векторе B) надо из...

Ошибка в алгоритме
Public Sub primer() x = 0.225 Dim p(1 To 20) For i = 1 To 20 p(i) = x * Exp(i) * Sin(x / i)...

Ошибка в алгоритме
Помогите найти ошибку в алгоритме. Алгоритм должен сортировать строки. void...

Ошибка в алгоритме
Всем доброго времени суток. Есть кусок программы, в общем он проверяет одинаковые элементы в масиве...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.