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

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

Восстановить пароль Регистрация
 
misterjava
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 9
11.01.2012, 02:26     Удаление из строки s все последовательности трёх букв ABC #1
Только начал освоивать язык С и не могу выполнить задачу
Нужно удалить из строки символов s все последователности трёх латинских букв ABC на языке С!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 02:26     Удаление из строки s все последовательности трёх букв ABC
Посмотрите здесь:

Удалит из данной последовательности все группы букв вида abcd C++
C++ Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc».
C++ Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc»
C++ Строки. Верно ли, что в последовательности s ,…, s имеется пять идущих подряд букв ‘e’
C++ Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 15:44     Удаление из строки s все последовательности трёх букв ABC #2
Добавлено через 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 строку то вы его увидите.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.01.2012, 16:27     Удаление из строки s все последовательности трёх букв ABC #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
 
#define S "abc"
 
int main (void)
{
   char s[] = "Helloabc worldabc";
   char *p;
   
   printf ("%s\n", s);
   for ( p = strstr (s, S) ; p ; p = strstr (s, S) )
      strcpy (p, p + strlen (S));
   printf ("%s\n", s);
   return 0;
}
http://liveworkspace.org/code/d82c6c...dd49ee7acb2e19
misterjava
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 9
11.01.2012, 17:01  [ТС]     Удаление из строки s все последовательности трёх букв ABC #4
Спасибо!
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
12.01.2012, 00:09     Удаление из строки s все последовательности трёх букв ABC #5
go, гениальное просто, спасибо за ваш пример=)
misterjava
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 9
12.01.2012, 18:08  [ТС]     Удаление из строки s все последовательности трёх букв ABC #6
[C]
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
main()
{
    char str[80];
    int i;
    printf("Programma udalit ABC\n");
    printf("Vvedite tekst::\n");
    scanf("%s", &str);
    for(i=0; i<80; ++i)
  { if (str[i]=='A'&&str[i+1]=='B'&&str[i+2]=='C')
    {str[i]=str[i+1]=str[i+2]=' ';
                      }}
    printf("Vash noviy tekst:\n");
    printf("%s\n", str);
    getch();//PAUSE
 
}
ABC заменяеться на пробел, а нужно что бы ABC вовсе небыло!
Как это сделать только в библиотеке stdio.h в Cи?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 19:32     Удаление из строки s все последовательности трёх букв ABC
Еще ссылки по теме:

C++ Написать функцию, принимающую указатель на строку и выполняющую удаление всех букв «а» из строки
Удаление определенных букв из строки C++
C++ Удаление букв из строки с буквами и цифрами

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
12.01.2012, 19:32     Удаление из строки s все последовательности трёх букв ABC #7
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main()
{
    char s[] = "ABC dnABCm nABC", *a = s, *b = s;
    for(; *b = *a; ++a) 'A' == a[0] && 'B' == a[1] && 'C' == a[2] ? a += 2 : ++b;
    puts(s);
    return 0;
}
Yandex
Объявления
12.01.2012, 19:32     Удаление из строки s все последовательности трёх букв ABC
Ответ Создать тему
Опции темы

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