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

Удаление из строки s все последовательности трёх букв ABC - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача на С++. Алгоритмы библиотеки STL. http://www.cyberforum.ru/cpp-beginners/thread425988.html
Программа должна демонстрировать использование контейнерных классов для хранения встроенных типов данных. В программе выполнить следующее: 1. Создать объект-контейнер multimap и заполнить его данными типа int. 2. Просмотреть контейнер. 3. Изменить контейнер, удалив из него одни элементы и заменив другие. 4. Просмотреть контейнер, используя для доступа к его элементам итераторы. ...
C++ Множественное наследование Листинг: #include <iostream> using namespace std; class Person{private: string Fname,Sname,years;}; class Student{private: string group;}; class Tich:public Person{private: string Profession;}; class GradStudent:public Student,public Person,public Tich{}; int main(){} http://www.cyberforum.ru/cpp-beginners/thread425987.html
Интервальный тип C++
Можно ли на С++ создать интервальный тип, как на Delphi? например var year: 1930..2000;
C++ Двоичные числа на С++
Доброго времени суток. Восьмеричные числа на С++ вроде представляются с префиксом 0, т.е. 0124 Шестнадцатеричные - 0x, т.е. 0x124, а как представляюстся двоичные?
C++ Вычислить http://www.cyberforum.ru/cpp-beginners/thread425978.html
Очень прошу! Нужно написать программу на СИ, которая реализует вычисление примера(сам пример прикреплен к посту) Желательно до 6 утра! Пожалуйста помогите! Сдавать нужно
C++ Помогите нарисовать блок схему void main() { f_inp=fopen("1.txt","r"); f_out=fopen("lecs.txt","w"); fprintf(f_out,"#"); c=fgetc(f_inp); while (c!=EOF) { switch (c) подробнее

Показать сообщение отдельно
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 15:44     Удаление из строки s все последовательности трёх букв ABC
Добавлено через 10 часов 43 минуты
Вот поправленная версия:
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
#include <locale.h>
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <string.h>
 
// Первичная строка на один символ
char *s;
int strsize = 2; 
 
// Динамическое выделение памяти под строку
char *InputString(char *str, char n)
{
    char *bufstr = (char*) malloc(strsize * sizeof(char)); // Выделяем память под новую строку, что больше предыдущей на 1 символ
    char bc[2] = {n, '\0'}; // Преобразуем добавляемый символ в строку для функции объединения строк strcat()
    strcpy(bufstr, str);    // Копируем исходную строку в новую строку с большим размером
    free(str);              // Возвращаем ненужную больше память
        strcat(bufstr, bc);     // Объединяем старую строку с новым добавленным символом
    return bufstr;          // Возвращаем указатель на облость памяти с нашей строкой
}
 
// Очистка строки от указанной в str2 символьной последовательности
char *Del(char *str, char *str2)
{
    int len = strlen(str2);
    //printf("len=%d\n", len);
 
    char *res;
    char *begstr = str; // Сохраняем указатель на начало исходной строки
 
    bool endfl = false; // true, если искомая комбинация символов не найдена
    do
    {
        if ((str = strstr(str, str2)))
        {
            for (int i = 0; i < len; i++) str[i] = '0'; // Заполняем искомые символьные последовательности нулями
        }
        else
        {
            endfl = true;
            {
                str = begstr; // Возвращаем указатель str на начало строки
                res = (char*)malloc(strsize*sizeof(char));
                int j = 0;
                // Копируем строку без 0-ей и со сдвигом на 1 символ влево( от мусорного символа H)
                for (int i = 0; i < strsize; i++)
                {
                    if (str[i+1] != '0' && str[i+1] != '\0') {res[j] = str[i+1]; j++;}
                }
                res[j-1] = '\0';
                free(str);
            }
        }
    }
    while (!endfl);
return res;
}
 
int main()
{
    setlocale(LC_ALL, ""); // Добавляем русский
 
    s = (char*) malloc(strsize * sizeof(char)); // Выделяем память под начальную строку
    s[1] = '\0';                                // Последний символ s[1] = '\0' конец строки
 
    printf("Введите строку: ");
    // Пока не введён 0 читаем строку
    char buf; 
    while ((buf = getche()))
    {
        if (buf == '0') 
        {
            printf("\n");
            break;
        }
        strsize++;
        s = InputString(s, buf);
    }
 
    //printf("Проблема с H: \"%s\"\n", s);
 
    s = Del(s, "ABC"); // Поиск и удаление всех ABC
    printf("Очищенная строка: \"%s\"\n", s);
 
    free(s);
    getch();
}
Помогая человеку сам столкнулся с вопросом, у кого есть время - подскажите пожалуйста откуда берётся мусорный символ 'H' в начале строки???=) Уже нет версий=\
У меня тупо поставлен пропускающий его костыль, но если раскоментить 80 строку то вы его увидите.
 
Текущее время: 04:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru