Несколько программ с одинаковыми символами что это

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

Подскажите, какие лучше функции использовать для этого?
Имеет ли смысл использовать strtok и strspn

  • Вопрос задан более трёх лет назад
  • 5833 просмотра

3 комментария

Простой 3 комментария

ввод происходит через gets()

Шел 2017 год. В учебных заведениях продолжали требовать использовать функции, удалённые из языка 6 лет назад.

ПО существу: нужно свернуть только определённые символы (точку), или все повторяющиеся?

MiiNiPaa, только точку, не каждый повторяющийся символ.
Например: aaabsd. asdasd. ssssss -> aaabsd.asdasd.ssssss

Решения вопроса 0
Ответы на вопрос 3

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

Сравнение двух списков в Excel (Различия & Сходства)

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Developer, ex-admin
strcpy
Искать и считать число повторов лучше вручную, т.к. конкретно такой функции нет.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

dio4

team leader, system engineer, master of sports

Код корявый (делал на коленке и бегом), но почти все, как задано в условии. Только один массив для строки и есть проверки на старте программы (на единичность символа, на его отсутствие и тд — смотрите). Меняет и повторяющиеся участки тоже (без ограничений — только на размер buff). Код вроде работает как надо. Пользуйтесь.

Читайте также:
Сэдо что это за программа

/* ваши комменты */ #include #include #include #define SIZE 50 char buff[SIZE] = ; int main(int argc, char * argv[]) < int i, j, num1, num2; char c = ‘.’; // искомый символ char * str_ptr1; char * str_ptr2; puts(«введите произвольную строку»); gets(buff); str_ptr1 = strchr(buff, c); str_ptr2 = strrchr(buff, c); if (str_ptr1 == 0)< puts(«искомого символа нет в строке»); exit(EXIT_FAILURE); >else if (str_ptr2 == 0 || str_ptr2 == str_ptr1) < fprintf(stdout, «%s», «Искомый символ единичен в строке»); exit(EXIT_FAILURE); >size_t len = strlen(buff); i = 0; while(buff[i] != ‘’) < if(buff[i] == c buff[i+1] == c)< num1 = i + 1; while(buff[i+1] == c)< ++i; num2 = i; >for(j = 0; j > ++i; > puts(«Итоговая строка имеет вид: «); puts(buff); exit(EXIT_SUCCESS); > /* в консоли: введите произвольную строку . abc. de Итоговая строка имеет вид: .abc.de введите произвольную строку ngt. искомого символа нет в строке */

Источник: qna.habr.com

Основные проблемы Манифесторов! Дизайн Человека.

Как сравнить 2 строки, содержащие одинаковые символы

Мой вопрос в том, что у меня есть 2 строки, например String1 и String2. Теперь я хочу проверить, содержат ли эти две строки одни и те же символы, независимо от их последовательности. Предположим String1= «qwerty» , String2= «qywter» . Теперь эти строки содержат одинаковые символы, но находятся в другой последовательности.

Итак, есть ли какая-либо функция, которая может использоваться, чтобы показать, что эти строки содержат одинаковые символы? Может ли метод equals() делать это? Вся помощь приветствуется.

prasad 23 авг. 2010, в 20:57
Поделиться

Каким должен быть результат, если они имеют одинаковые символы, но не одинаковое количество символов? (Например, «qwerty» и «qywtery»?) Они содержат одинаковые символы, но не одинаковое количество символов.

MikeTheReader 23 авг. 2010, в 18:29
Поделиться:

Читайте также:
Параллель спейс что это программа

7 ответов

Лучший ответ

char[] chars1 = string1.toCharArray(); char[] chars2 = string2.toCharArray(); Arrays.sort(chars1); Arrays.sort(chars2); return Arrays.equals(chars1, chars2);
Bozho 23 авг. 2010, в 18:42
Поделиться
но что они возвращают .
prasad 23 авг. 2010, в 18:36

Bozho 23 авг. 2010, в 18:37

я имею в виду, «вернуть Arrays.equals (chars1, chars2);» оператор возвращает логическое значение или int ??

prasad 23 авг. 2010, в 18:39
возвращает boolean
Bozho 23 авг. 2010, в 18:44
Показать ещё 2 комментария

Вы можете использовать String.equals , хотя и косвенно. Сначала вам нужен вспомогательный метод:

// given a String, sorts its chars and return it as another String public static String sorted(String s)

Затем вы можете:

String s1 = «qwerty»; String s2 = «qywter»; System.out.println(sorted(s1)); // eqrtwy System.out.println(sorted(s1).equals(sorted(s2))); // true

Обратите внимание, что это не самый эффективный алгоритм — это время O(N log N) и использует постороннее пространство — но должно работать нормально для коротких строк. Для длинных строк вы хотите пройти через каждую char (или кодовые точки Юникода) вручную (вместо toCharArray() ) и, возможно, использовать линейное время подсчет сортировки.

Если вы не заботитесь о конкретном совпадении совпадений символов (например, «xxxyyy» и «xy» имеют одинаковые символы, хотя и в разных числах), тогда вы можете использовать представление типа ( java.util.BitSet ).

// given a string, returns its used char set as a java.util.BitSet public static BitSet usedChar(String s) < BitSet bs = new BitSet(); for (int i = 0; i < s.length(); i++) < bs.set(s.charAt(i)); >return bs; >

Затем вы можете:

System.out.println( usedChar(«xxxyyy»).equals(usedChar(«xy»)) ); // true System.out.println( usedChar(«xyz»).equals(usedChar(«abc»)) ); // false

Источник: overcoder.net

Поиск общих букв в двух строках

Программа принимает на вход две строки и находит в них общие буквы.

Читайте также:
На телефоне включился fastboot что это за программа

Решение задачи

  1. Два строки сохраняются в разные переменные.
  2. Эти строки преобразуются в множества, а общие буквы находятся при помощи пересечения этих множеств.
  3. Общие буквы записываются в список.
  4. Для вывода этого списка на экран используется цикл.
  5. Конец.

Исходный код

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

s1 = raw_input(«Введите первую строку:») s2 = raw_input(«Введите вторую строку:») a = list(set(s1) Общими буквами являются:») for i in a: print(i)

Объяснение работы программы

  1. Пользователь вводит две строки и они сохраняются в две разные переменные.
  2. Обе строки в этих переменных преобразуются в множества при помощи функции set() . При помощи оператора https://pythonist.ru/poisk-obshhih-bukv-v-dvuh-strokah/» target=»_blank»]pythonist.ru[/mask_link]
Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru