Как удалить символ из строки с
Перейти к содержимому

Как удалить символ из строки с

  • автор:

Удаление символов из строки

K&R (61-62). Приводится пример функции squeeze , которая удаляет все символы c из строки s .

Ниже представлен полный код программы с использованием этой функции. А также ответ к упражнению 2.4, где предлагается написать функцию, удаляющую из строки s1 все символы, встречающиеся в строке s2 .

Алгоритм удаления символа из строки можно описать так:

  • Пока не будет достигнут конец строки,
  • если очередной символ строки не равен символу для удаления,
  • записать очередной символ по месту индекса j , после этого последний увеличить на единицу.

Другими словами, алгоритм сводится к тому, что символ по индексу i затирается следующим символом, если он совпал с символом для удаления; т.к запись идет по счетчику j , а он увеличивается лишь тогда, когда символы из строки и для удаления не совпадают.

Алгоритм удаления тех символов строки, которые встречаются в другой строке, отличается от предыдущего тем, что нужно по очереди извлекать символы из второй строки и удалять их из первой. Т.е. приведенный выше алгоритм следует вложить в цикл перебора символов второй строки.

Удаление всех символов c из строки

#include #define MAX 100 void squeeze (char s[], int c); main ()  char str0[MAX]; int i, c; for (i = 0; (c = getchar()) != '\n'; i++) str0[i] = c; str0[i] = '\0'; c = getchar(); squeeze (str0, c); printf("%s\n", str0); > void squeeze (char s[], int c)  int i, j; for (i = j = 0; s[i] != '\0'; i++) if (s[i] != c) s[j++] = s[i]; s[j] = '\0'; >

Удаление всех символов, встречающихся в строке s2 , из строки s1

#include #define MAX 100 #define DEL 10 void squeeze (char s[], char s1[]); void written (char s[]); main()  char str[MAX]; char str1[DEL]; written (str); written (str1); squeeze (str, str1); printf("%s\n", str); > void written (char s[100])  int i, c; i = 0; while ((c = getchar()) != '\n')  s[i] = c; ++i; > s[i] = '\0'; > void squeeze (char s[], char s2[])  int k, i, j; for (k = 0; s2[k] != '\0'; k++)  for (i = j = 0; s[i] != '\0'; i++) if (s[i] != s2[k]) s[j++] = s[i]; s[j] = '\0'; > >

Примечание. Во второй программе запись символов в строку выделена в отдельную функцию, т.к. надо записать две строки. Иначе пришлось бы дублировать код.

X Скрыть Наверх

Решение задач на языке C

Удаление определенных символов из строки

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

Отслеживать
51.6k 200 200 золотых знаков 60 60 серебряных знаков 242 242 бронзовых знака
задан 10 июл 2020 в 18:22
Александр II Александр II
95 1 1 золотой знак 1 1 серебряный знак 10 10 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

эффективнее решить задачу можно с использованием идиомы erase-remove:

 std::string a = "agaga"; a.erase(std::remove(a.begin(), a.end(), 'a'), a.end()); std::cout  

обьяснение: remove смещает элементы не равные 'a' в начало строки в том же порядке в каком они были изначально, потом возвращает итератор на первый элемент равный 'a' (эти элементы лежат в хвосте строки), и затем erase затирает ненужные элементы от начала этого итератора и до конца

удалить символ из строки js

Для удаления символа из строки можно воспользоватьтся методом replace() , передав первым аргументом символ, который нужно удалить, а вторым - пустую строку '' .

Метод replace() поддерживает работу с регулярными выражениями. Если первым аргументом передать регулярное выражение с флагом g , то из строки будут удалены все символы, совпадающие с регулярным выражением, а иначе - только первый.

Предположим, нам необходимо удалить из номера телефона все ошибочно попавшие в него специальные символы:

const phoneNumber = '+7* $999% 123& 45# 67'; const regExp = /\*|%|#|&|\$/g; console.log(phoneNumber.replace(regExp, '')); // => +7 999 123 45 67 

TRIM - удаление символов с начала и конца строки

Если не передать второй параметр, то удаляются пробелы:

SELECT '#' || ltrim(' мама_мыла_раму') AS result > #мама_мыла_раму 

rtrim - удаляет символы с конца строки.

Работает аналогично ltrim , только символы удаляются с конца строки.

SELECT rtrim('мама_мыла_раму', 'муа') > мама_мыла_р 

btrim , или просто trim - удаляет символы с начала и конца строки.

Работает аналогично ltrim и rtrim , только символы удаляются с начала и конца строки.

SELECT trim('мама_мыла_раму', 'муа') > _мыла_р 

trim (из_какой_части какие_символы from откуда)

У trim есть еще одна форма записи:

trim (из_какой_части какие_символы from откуда) 

из_какой_части принимает одно из значений:

  • leading - с начала строки;
  • trailing - с конца строки;
  • both - с обеих сторон.

какие_символы - какие символы удалять. Порядок символов не важен. Регистр важен.

откуда - из какой строки удалять.

SELECT trim(both 'муа' from 'мама_мыла_раму') > _мыла_р 
SELECT trim(trailing 'муа' from 'мама_мыла_раму') > мама_мыла_р 

Практика TRIM - удаление символов с начала и конца строки

7.6 Дополнение до определенной длины

7.8 REPLACE - замена подстроки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *