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

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

Обучение C#

Работая с этим сайтом, Вы даете согласие на использование файлов Cookie.

Класс String для работы со строками

Инициализация строк

Для инициализации символьных строк используются строковые литералы, то есть последовательности символов, заключенные в двойные кавычки. Кроме символов строковый литерал может содержать Escape-последовательности – специальные символы, которые начинаются с обратного слеша ( \ ), после которого следует обозначение символа.
Перечень основных Escape-последовательностей приведен в таблице

Escape-последовательность Значение
\a Звонок (предупреждение)
\b Удаление предыдущего символа
\f Перевод страницы
\n Новая строка
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\’ Одиночная кавычка
Двойная кавычка
\\ Обратный слеш
\? Вопросительный знак
\xhhhh Символ Юникода в шестнадцатеричном формате, где hhhh – собственно код символа
\udddd Символ Юникода (dddd)

Escape-последовательности используются, например, для перевода строки или отступа в виде символа табуляции.
Если необходимо задать строку без Escape-последовательностей, то можно применить буквальный строковый литерал, обозначаемый префиксом @ , после которого размещается неизменяемая последовательность символов в двойных кавычках. Такой литерал может размещаться в коде на нескольких строчках, и это размещение сохранится при выводе.
Примеры инициализации объектов типа string .

image articles/514/514_1.png

Кроме того, при формировании строк очень часто используется перегруженный оператор + , который осуществляет слияние строк:

image articles/514/514_2.png

Класс string содержит ряд конструкторов для инициализации строк, которые позволяют сформировать строку из массива символов типа char или его части.
Также можно сформировать строку из последовательности одинаковых символов.

image articles/514/514_3.png

Основным свойством любой строки является свойство Length , которое позволяет получить количество символов в строке.

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

image articles/514/514_4.png

Кроме того, класс String обладает рядом методов, основные из которых будут рассмотрены ниже.

Сравнение и копирование строк

Метод Compare() является статическим методом класса String и позволяет посимвольно сравнить две строки или подстроки. Возвращаемое значение метода равно 0 в случае равенства строк. Пример использования этого метода:

image articles/514/514_5.png

Статический метод Copy() позволяет создать копию строки, указанной в качестве аргумента.
Для проверки, содержат ли строки одинаковые последовательности символов, может использоваться метод Equals() , имеющий как статический, так и нестатический вариант использования. Пример использования методов:

image articles/514/514_6.png

Изменение регистра букв в строке

Для изменения регистра букв, используемых в строке, можно использовать методы ToUpper() и ToLower() , приводящие все буквы строки соответственно в верхнему или нижнему регистру.

image articles/514/514_7.png

Работа с подстрокой в строке

Для формирования подстроки может использоваться метод Substring() , который формирует подстроку начиная с заданной позиции или начиная с заданной позиции указанной длины.

image articles/514/514_8.png

  • Contains(подстрока) – проверяет, содержит ли данная строка подстроку, указанную в качестве аргумента, возвращает логическое значение true или false .
  • IndexOf(подстрока) – возвращает индекс первого вхождения подстроки в данную строку. Если вхождений нет, возвращается -1.
  • LastIndexOf(подстрока) – возвращает индекс последнего вхождения подстроки в данную строку. Если вхождений нет, возвращается -1.
  • Replace(подстрока1, подстрока2) – заменяет все вхождения подстроки1 подстрокой2.
  • StartsWith(подстрока) – проверяет, совпадает ли начало строки с указанной подстрокой.
  • EndsWith(подстрока) – проверяет, совпадает ли конец строки с указанной подстрокой.

image articles/514/514_9.png

Удаление и добавление подстрок

  • Remove(Позиция, ЧислоСимволов) — удаляет заданное число символов из строки начиная с указанной позиции. Если число символов не указано, то строка завершится на указанной позиции.
  • Insert(Позиция, подстрока) – вставляет подстроку в строку начиная с указанной позиции.

image articles/514/514_10.png

Разделение и объединение строк

Для разделения строки на подстроки и сохранения их в массив используется метод Split() , в качестве аргумента которому передается символ-разделитель. По умолчанию в качестве символа разделителя используется пробел.
Для объединения строк в единую строку используется статический метод Join() , в качестве аргументов которому передаются строка-разделитель и массив строк, которые необходимо объединить через указанный разделитель.

Рассмотрим пример – посчитать количество слов во введенной строке.
Разделим строку на слова, посчитаем количество слов. Затем выведем массив слов и объединим слова снова в единую строку, используя в качестве разделителя строку " | " .

image articles/514/514_11.png

Однако если слова разделяются не одним, а несколькими пробелами, то количество элементов в массиве s2 будет больше, чем количество слов:

image articles/514/514_12.png

Метод Split() содержит перегрузку, позволяющую указать, что пустые строки из формируемого массива следует удалить – опция StringSplitOptions .RemoveEmptyEntries . Однако в этом случае в качестве разделителя необходимо указать массив символов или строк.

image articles/514/514_13.png

Кроме того, для удаления начальных и конечных символов- разделителей из строки можно использовать метод Trim() .

image articles/514/514_14.png

Форматирование объектов

Класс String содержит статический метод Format( String , Object ) , который позволяет перевести указанный объект в строковое представление в соответствии с форматом, указанным в форме строки в качестве первого аргумента. Однако различные типы значений имеют различные форматы представления, и это – тема для отдельной статьи.

Закрепить использование строк Вы можете в разделе Строки курса Алгоритмика

Автор: Вставская Елена Владимировна

Начинаем практику по языку C#

Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.

Основатель проекта


Волосатов Евгений

formulist@gmail.com Рекламодателям

Вебинары C#

+ Бесплатно, каждую субботу
+ Создание программ с нуля
+ Решение консольных задач

Видео-уроки

+ 300 практических видеоуроков
+ 400 интерактивных задач
+ Видео-решения и разбор

Миссия

Погружение в язык C#
Мотивация к изучению языка
Прокачка навыков программирования

Работа со строками string С#

Приветствую всех, сегодня поговорим о строках. Все мы так или иначе используем string в своих приложениях. Но у начинающих программистов возникают проблемы в понимании и с работой с этим типом. Строку можно представить в виде массива символов, однако это не так, так как строки являются ссылочными типами. Строка неизменна, каждый раз когда мы пытаемся изменить строку, старая стерается и создается новая. Так как строки являются ссылочными типами они находятся в куче.

Объявление и инициализация строк:

Как из строки по индексу получить символ?

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

Как найти символ или целое слово в строке?

Мы создали строку, и указали в качестве поиска символ y воспользовались методом IndexOf(); и сохранили результат в целочисленной переменной. Результат стал цифра 6, так как первое вхождение символа y было по индексу 6.

Так же мы можем осуществить не только поиск символа но и подстроки, в примере ниже мы из строки предложения, найдем целое слово!

Мы в примере выше, воспользовались тем же метод IndexOf(); который принял другой аргумент, так как он имеет ряд перегрузок. И сохранили индекс вхождения слова в строку.

Еще одним часто используемым методом строк является StartsWith(); Который вернет true если слово в строке было найдено, в противном случаи false, таким образом этот метод можно использовать для поиска слова в тексте.

Как разбить строку на слова?

В следующем примере возьмем строку и разобьем ее на слова сохраним в массив и выведем в консоль. А воспользуемся мы методом Split(); который принимает в качестве аргумента символ, в нашем случаи пробел.

Метод Split(); возвращаем строковый массив, содержащий подстроки данного экземпляра, разделенного элементами заданного массива.

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

В данном примере мы воспользовались другой перегрузкой метода Split(); первый аргумент символ пробела остался не измененным, но добавился второй аргумент StringSplitOptions.RemoveEmptyEntries который позволяет удалить все пустые подстроки.

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

Для этого воспользуемся методом Trim(); Который позволяет без параметров удалить пробелы в начале и в конце строки, однако он имеет ряд полезных перегрузок одна из них, удаление в начале или в конце строки заданного символа.

Для обрезки определенной части строки воспользуйтесь методом Substring(), имеет он два перегруженных метода, которые позволяют удалить до указанной позиции в начале строки и вторая перегрузка метода позволяет удалить с конца строки до указанной позиции символы.

Как вставить слово в строку в определенное место?

В этом примере мы рассмотрим метод Insert(); который позволяет вставить в строку по индексу подстроку.

Как видно из примера первый аргумент, это индекс с которого будет происходить вставка подстроки, а второй аргумент и есть сама подстрока.

Как удалить часть строки?

В этом нам поможет метод Remove(); Рассмотрим пример ниже:

Как заменить слово в строке целиком?

Сейчас рассмотрим как можно в строке заменить полностью слово на другое. Для этого воспользуемся методом Replace();

В качестве первого аргумента метод принимает слово которое требует замены, если оно есть он поменяет его на слово которое во втором аргументе. Я этот метод еще использую когда требуется удалить определенное слово в строке. Для этого достаточно вторым аргументом в методе указать «» и ваше слово будет удаленно, можно так же им воспользоваться для удаления пробелов.

Как изменить регистр букв в строке на заглавные или прописные?

Это один из часто используемых методов ToLower(); ToUpper(); которые позволяют всю строку преобразовать в заглавную или прописную строку.

Операции со строками в STL

В этом листке мы снова будем работать со строками, активно используя стандартную библиотеку языка C++ STL (Standard template library).

Считывание строк

Напомним, что строки можно считывать двумя способами: до пробельного символа (пробела, конца строки, символа табуляции) при помощи конструкции cin >> S , и до конца строки при помощи функции getline(cin, S) .

Арифметические операторы

Со строками можно выполнять следующие арифметические операции:
= — присваивание значения.
+= — добавление в конец строки другой строки или символа.
+ — конкатенация двух строк, конкатенация строки и символа.
== , != — посимвольное сравнение.
< , > , <= , >= — лексикографическое сравнение.

Подробней об операторах для строк читайте здесь.

Конструкторы

Строки можно создавать с использованием следующих конструкторов:
string() — конструктор по умолчанию (без параметров) создает пустую строку.
string(string & S) — копия строки S
string(int n, char c) — повторение символа c заданное число n раз.
string(char c) — строка из одного символа c .
string(string & S, int start, int len) — строка, содержащая не более, чем len символов данной строки S , начиная с символа номер start .

Конструкторы можно вызывать явно, например, так:

В этом примере явно вызывается конструктор string для создания строки, состоящей из 10 символов ‘z’ .

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

Подробней о конструкторах для строк читайте здесь.

Методы для строк

Методом называется функция, которая применяется к объекту, например, строке. При вызове метода его имя пишется после идентификатора объекта через точку, например, у объекта типа string есть метод size , возвращающий длину строки. Если S — это строка, то метод вызывается так: S.size() . Другой пример: метод substr возвращает подстроку заданной строки:

В данном случае будет выведен текст world .

Для обозначения того, что запрашиваемая последовательность символов не найдена, многие методы (например, find ) возвращают специальную константу string::npos .

A: Есть ли символ @

Дана строка (считывается при помощи getline). Если в этой строке есть символ @ , то выведите YES , иначе выведите NO .

Используйте метод find , для поиска символа в строке.

Ввод Вывод

B: Есть ли гласная

Дана строка (считывается при помощи getline). Если в этой строке есть заглавная или строчная гласная буква (A, O, I, U, E, Y) то выведите YES , иначе выведите NO .

Используйте метод find_first_of , для поиска гласной в данной строке.

Ввод Вывод

C: Подсчитайте количество символов @

Подсчитайте, сколько раз в данной строке встречается символ @.

Указание: используйте метод find , запоминая последнюю позицию найденного символа @ и продолжая поиск только с этой позиции. Подсчитывайте количество успешно завершенных поисков.

Примечание: решения, в которых на каждом шаге метод find вызывается дважды, приниматься не будут.

Ввод Вывод

D: Подсчитайте количество гласных

Подсчитайте количество заглавных и строчных гласных букв в данной строке. Воспользуйтесь предыдущей задачей, заменив метод find на find_first_of .

Ввод Вывод

E: Поиск подстроки

Даны две строки (с пробелами). Выведите YES , если вторая строка встречается внутри первой, иначе выведите NO .

Ввод Вывод

F: Сколько раз одна подстрока находится внутри другой?

Даны две строки. Подсчитайте, сколько раз вторая строка встречается в первой, как ее подстрока. “Пересекающиеся” вхождения считаются несколько раз.

Ввод Вывод

G: Вычеркнуть буквы

Даны две строки. Определите, можно ли из первой строки удалить несколько символов так, чтобы получилась вторая строка. Выведите YES или NO .

Ввод Вывод

H: Пробелы после запятой

После запятой в тексте должен строять пробел. Дана строка, вставкой пробелов в неё добейтесь выполнения этого правила. Не надо вставлять пробел, если он там уже есть.

Ввод Вывод

I: Продублировать гласные буквы

Дана строка. Продублируйте в ней все гласные буквы.

Ввод Вывод

J: Удалите все символы @

Дана строка (считывается при помощи getline). Удалите из нее все символы @ , находя их при помощи метода find и удаляя их при помощи метода erase .

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

Ввод Вывод

K: Удалите все гласные буквы

Удалите из заданной строки все гласные буквы.

Ввод Вывод

L: Удалить все вхождения слова

Даны две строки. Удалите из первой строки все вхождения данного слова. После удаления слова поиск следующего вхождения начинается со следующего символа за удаленным словом (то есть если в результате удаления слова образуется еще одно такое же слово, то его удалять не надо).

Ввод Вывод

M: Удалить все внутри скобок

Дана строка. Удалите в ней все пары круглых скобок, вместе со всем их содержимым.

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

Ввод Вывод

N: Замените 1 на one везде

В некоторой строке замените все символы 1 на слово one . Используйте методы find и replace .

Ввод Вывод

O: Заменить все вхождения слова

P: Удалите лишние пробелы

Дана строка. Удалите все лишние пробелы: из начала строки, из конца строки и повторяющиеся пробелы внутри строки.

Обязательно выводите конец строки после вывода самой строки!

Ввод Вывод

Q: Поменять два слова местами

Программа получает на вход строку, состоящую из двух слов, разделенных пробелом (слово любая последовательность непробельных символов). Создайте строку, полученную из данной перестановкой слов и выведите ее.

Код, подобный такому, приниматься не будет:

Не забывайте выводить символ конца строки!

Ввод Вывод

R: Пословное обращение строки

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

Ввод Вывод

S: Смайлики

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

  • первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
  • далее может идти символ – (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
  • в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: ( , ) , [ , ] .
  • внутри смайлика не может встречаться никаких других символов.

Например, нижеприведенные последовательности являются смайликами:

в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики):

В этой задаче надо будет посчитать количество смайликов, содержащихся в данном тексте.

Вводится одна строка текста, которая может содержать маленькие латинские буквы, пробелы, символы, которые могут встречаться в смайликах. Длина строки не превышает 100000 символов.

Выведите одно число — количество смайликов, которые встречаются в тексте.

Ввод Вывод

T: Выравнивание по левому краю

Первая строка входного файла содержит целое число N. Далее (начиная со следующей строки) идет текст, который может содержать много строк. Необходимо данный текст разбить на строки, длина которых не превосходит N и вывести его в файл. В каждой выведенной строке не должно быть пробелов в начале строки, пробелов в конце строки, слова в строке должны разделяться одним пробелом. При этом каждая строка должна быть максимально длинной, то есть строки формируются по “жадному” принципу: добавляем слова из входного файла до тех пор, пока длина полученной строки не превышает N, после этого ставим разрыв строки. Гарантируется, что во входном файле нет слов длиннее N символов.

Ввод Вывод

U: Выравнивание по ширине

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

Последняя строка в выводе должна быть выровнена по левому краю.

Ввод Вывод

V: Правила оформления программ

Дана строка, содержащее арифметическое выражение на языке C. Строка может содержать только следующие символы: пробелы, цифры, латинские буквы, знаки + , — , * , / , % , = , ( , ) , , (запятая).

  • Целочисленные константы
  • Идентификаторы переменных
  • Бинарные операции + , — , * , / , % , = .
  • Унарные операции + , — .
  • Скобки, меняющие порядок выполнения операций.
  • Вызовы функций от 0, 1, 2 и большего числа аргументов.
  • Бинарные операции отделяются пробелами с двух сторон.
  • Унарные операции пишутся слитно с последующим операндом.
  • С внутренней стороны скобочек пробелы не ставятся.
  • Имя функции пишется слитно с последующей скобкой.
  • Запятая пишется слитно с предыдущим текстом, после запятой ставится пробел.
  • В строке не должно быть начальных и конечных пробелов.

После вывода выражения не забудьте вывести символ конца строки.

Ввод Вывод

W: Действительное число

Вещественное число задается следующим образом (форма Бэкуса-Наура):

В форме Бэкуса-Наура знак ::= означает определение, например, <Sign> ::= ‘+’ | ‘-‘ означает, что понятие Sign — это один из двух символов + или + .

Значение в квадратных скобках означает, что это значение может встречаться, а может и не встречаться, а значение в фигурных скобках означает, что это выражение может быть записано 0, 1 или большее количество раз подряд. Например, записать [<Sign>] <digit> <<digit>>означает Sign , который может присутсвовать или отсутствовать, за которым идет digit , повторенная 1 или более раз.

Программа получает на вход одну строку, содержащащей не более 200 символов.

Выведите YES , если эта строка является корректной записью действительного числа в соответствии с данным определением, или NO , в противном случае.

Ввод Вывод

X: Значение выражения

Задано числовое выражение. Необходимо вычислить его значение или установить, что оно содержит ошибку. В правильном выражении могут встречаться знаки сложения, вычитания, умножения, скобки и пробелы (пробелов внутри чисел быть не должно). Приоритет операций стандартный. Все числа в выражении целые и принадлежат диапазону int . Также гарантируется, что все промежуточные вычисления умещаются в этот тип.

Формат входных данных

Формат выходных данных

Пример

Ввод Вывод

Y: Словарь

Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский словарь. Английский он к тому времени знал в совершенстве, и его мечтой было изучить латынь. Поэтому попавшийся словарь был как раз кстати.

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

Как известно, словарь состоит из переводимых слов, к каждому из которых приводится несколько слов-переводов. Для каждого латинского слова, встречающегося где-либо в словаре, Вася предлагает найти все его переводы (то есть все ангийские слова, для которых наше латинское встречалось в его списке переводов), и считать их и только их переводами этого латинского слова.

Помогите Васе выполнить работу по созданию латинско-английского словаря из англо-латинского.

Формат входных данных

Все слова состоят только из маленьких латинских букв. Общее количество слов на входе не превышает 100. Длина каждого слова не превосходит 15 символов.

Формат выходных данных

Выведите соответствующий данному латинско-английский словарь в следующем формате. В первую строку запишите единственное целое число N — количество латинских слов в словаре. Далее выведите N описаний, каждое описание в отдельной строке: сначала латинское слово, затем отделённый пробелами дефис (символ номер 45), затем разделённые запятыми с пробелами переводы этого латинского слова на английский.

При этом порядок английских слов внутри перевода одного латинского может быть каким угодно. Кроме того, порядок следования латинских слов для перевода в словаре также не важен.

Пример
Ввод Вывод

Z: EuroEnglish

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

Первоочередной задачей будет избавление от буквы c , которая в сочетаниях сi и сe будет изменяться на s , в сочетании ck — опускаться, а в остальных случаях заменяться на k . При этом все замены будут производиться в строгом порядке слева направо. То есть, например, в слове success сначала первая из двух букв c заменится на k , а затем вторая — на s , то есть получится suksess . А слово cck превратится в kk .

На второй год из английских слов изымут все удвоенные буквы: ee изменят на i , oo — на u , a в остальных комбинациях будут просто писать одну букву вместо двух одинаковых. Такие замены также будут делать строго в порядке слева направо. Так, слово ooo превратится в uo , а oou — просто в u (в нем сначала oo заменится на u , а затем uu — на u ), слово iee превратится в i (в нем сначала ee заменится на i , а затем ii — на i ).

На третий год на конце слова станут опускать букву е , если эта буква не является единственной буквой в слове.

Наконец, завершением реформы станет отмена артиклей (в английском языке три артикля: а , an и the ). При этом удаляться эти артикли будут только тогда, когда они в исходном тексте были словами a, an, the. То есть, например, текст the table после реформ первых трех лет превратиться в th tabl , а после реформы четвертого года — просто в tabl . А слово aaaaa после реформы первых лет станет словом a , но поскольку изначально оно не было словом a (артиклем), то оно в итоге так и останется словом a .

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

Формат входных данных

Во входном файле записана одна строка текста, состоящая не более чем из 200 символов: латинских строчных и заглавных букв, пробелов и знаков препинания (в тексте могут встречаться: точка, запятая, вопросительный и восклицательный знаки, двоеточие, тире, точка с запятой, открывающаяся и закрывающаяся скобки, апострофы, кавычки). Заглавные буквы могут встречаться только в начале слова. Нигде подряд не могут стоять два пробела. В начале и в конце строки не может стоять пробел. Слова отделяются друг от друга пробелами и/или знаками препинания.

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

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