Имеется строка, в которой может встретиться несколько одинаковых символов подряд (точка). Нужно заменить их на 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
Искать и считать число повторов лучше вручную, т.к. конкретно такой функции нет.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
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] != ‘