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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
misterjava
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 9
#1

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

11.01.2012, 02:26. Просмотров 733. Ответов 6
Метки нет (Все метки)

Только начал освоивать язык С и не могу выполнить задачу
Нужно удалить из строки символов s все последователности трёх латинских букв ABC на языке С!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 02:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление из строки s все последовательности трёх букв ABC (C++):

Найти все последовательности из трёх нулей в заданных строках - C++
Ввести в память ПЭВМ с клавиатуры три строки, в каждой из которых не более 80 символов. Написать программу, которая ищет все...

Удаление заглавных букв из строки - C++
Помогите, пожалуйста, написать программу: "Удалить из введенной пользователем строки все заглавные буквы." Заранее большое...

Удаление определенных букв из строки - C++
Доброго времени суток! Помогите, пожалуйста, с заданием! Буду очень благодарен! Дано задание: написать функцию, чтобы из строки,...

Удаление букв из строки с буквами и цифрами - C++
как удалить букву из ряда цифр например: 1123123ы84750щ13498м93 => 1123123847501349893

Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc» - C++
Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc».

Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc». - C++
помогите пожалуйста с задачей! Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc».

6
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 15:44 #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 строку то вы его увидите.
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.01.2012, 16:27 #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/d82c6c45dbd5c489d6dd49ee7acb2e19
2
misterjava
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 9
11.01.2012, 17:01  [ТС] #4
Спасибо!
0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
12.01.2012, 00:09 #5
go, гениальное просто, спасибо за ваш пример=)
0
misterjava
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 9
12.01.2012, 18:08  [ТС] #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и?
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
12.01.2012, 19:32 #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;
}
0
12.01.2012, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 19:32
Привет! Вот еще темы с ответами:

Из заданной строки получить новую, заменив в ней все сочетания «abcd» на «abc» - C++
Помогите с задачей, кто знает, как сделать проверку? Т.е. чтобы при вводе цифр, пробелов или пустой строки выводилось сообщение об этом и...

Удалит из данной последовательности все группы букв вида abcd - C++
очень нужно написать 2 проги на С....помогите кто чем может 1.даны натуральное число n, символы S1,..., Sn.Удалит из данной...

Строки. Верно ли, что в последовательности s ,…, s имеется пять идущих подряд букв ‘e’ - C++
Выяснить, верно ли, что в последовательности s ,…, s имеется пять идущих подряд букв ‘e’.

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


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

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

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