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

В символьной строке удалить все слова, состоящие из нечетного количества букв. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ контейнеры С++ http://www.cyberforum.ru/cpp-beginners/thread372179.html
Задача:заполнить массив четными числами ,а множество – нечетными,с пом. алгоритма merge()объединить эти контейнеры в вектор… Но если #include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; . . . int inarr; set<int> inset;
C++ Сжатия текстовых файлов посредством диандного кодирования Недавно увлёкся алгоритмами сжатия файлов. Если по алгоримтам Фано и Хафмана можно найти достаточно информации, то с диадным кодированием посложнее будет. Данный метод мне не понятен Есть ли у кого нибудь хоть какие то наработки по этому методу ? http://www.cyberforum.ru/cpp-beginners/thread372141.html
Можно ли в командной строке перевести курсор на строку вверх? C++
Надо вернуться уже после того как курсор был переведен на новую строку. Может, есть какая управляющая последовательность или манипулятор?
C++ Программа на С++
Создано приложение содержащее два окна. Первые сто событий, плступившие в первое окно должны быть переданы во второе.
C++ Задачка с массивом http://www.cyberforum.ru/cpp-beginners/thread372136.html
Как решить эту задачу в Си? Дан массив вещественных случайных чисел (размер массива определяет поль-зователь, но в диапазоне ). Подсчитать сумму положительных чисел.
C++ Кубик 1. Разработать класс кубик. задать для каждой из грани теоретическое появление, провест от 10тысяч до 50 тысяч опытов сравнить полученные практическиие с заданными теоретическими. Класс кубик состоит из свойств метоодов: 1 грани 6шт 2 вероятность выпадения граней 3 распределения вероятностей на орте методы - проверка на корректность выпадения граней 1 суммарной вероятности кубика 2 бросок... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
26.10.2011, 13:18     В символьной строке удалить все слова, состоящие из нечетного количества букв.

Не по теме:

Цитата Сообщение от accept Посмотреть сообщение
а так на EOF цикл начинает работать
- не будет такого!
Давайте не холиворить, алгоритм я тестировал вчера притом довольно плотно...
Кстати от возможного облома я ещё и этим застраховался
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
char str[1025] = {0};



Добавлено через 1 час 0 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
scanf("%[^\n]%c",str,&chr);
- вводим строку str (можно с пробелами, как раз это умный спецификатор ввода %[^\n] - считает все до символа \n, который мы запишем уже в chr (в буфере чтоб не висел)

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(sscanf(&str[pos],"%s",buf))
- sscanf производит чтение из строки str в соответсвии со спецификатором %s - т.е. выделяем подстроку(слово), которое записывается в buf. При успешном считывании подстроки sscanf возвращает 1 иначе 0, вобщем если мы перестанем считывать цикл остановиться

Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
pos += (wLen = strlen(buf));
- это позиция с которой будем производить выкопировку подстроки sscanf(&str[pos],"%s",buf)

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(getStrLen(buf) % 2 != 0)
- здесь получаем реальную длинну слова, как я уже отмечал

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//Мой алгоритм не совершенен в плане выделения слов
//они могут идти с запятыми и точками вконце
//поэтому их нужно пропускать
sscanf - у фиолетово есть после слова знак препинания или нет, для него подстрока то что разделено пробелами, т.е. запятая у слова также подхватывается, поэтому эта функция
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
long getStrLen(char * str)
- подсчитывает именно число букв в слове, запятые и прочее пропускается

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
strcpy(&str[pos - wLen - 1],&str[pos]);
тут делаем следующее
Моя строка
This, - is the test of my program!
мы дошли до the так вот мы копируем test of my program! на место the test of my program!,
получается
This, - is test of my program!ram!

Добавлено через 6 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
str[sLen - wLen - 1] = '\0';
- ну а здесь обрезаем This, - is test of my program!ram! на оставшийся после копирования кусок строки ram! получаем
This, - is test of my program!
и сдвигаем позицию в строке на 1-ку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
pos++;
- этим мы попадаем сюда " test of my program!".
Далее пропускаем пробелы (они будут портить нам жизнь если их не удалить)
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//Пропускаем пробелы
* * * * * * * * * * * * while(str[pos] == ' ' && pos < sLen)
* * * * * * * * * * * * * * * * pos++;
Получаем "test of my program!". и возвращаемся вначало цикла, далее в buf запишется уже test и алгоритм не будет ничего удалять из исходной строки до того как не встретит program!, program содержит нечётное число букв, поєтому как и the программа его выбросит из исходной строки

Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(sLen <= pos)
* * * * * * * * * * * * * * * * break;
- ну а здесь проверяем не достигли ли конца строки, если это вначало цикла уже не зайдём, т.к. break прервём цикл
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(sscanf(&str[pos],"%s",buf))
- и sscanf не будет работать с пустой строкой (вот Вам accept и допусловие выхода)

Добавлено через 1 минуту
Далее по коду всё тривиально просто
dander, надеюсь мои коментарии помогут вам детальней разобраться. Да многовато всего напихано в алгоритм, ну и задача мягко сказать стоит не 2 + 2

Добавлено через 3 минуты
dander, в принципе если Вам сложно будет понять код, возьмите код easybudda, он в плане объёма меньше вот тут только замените это
Цитата Сообщение от easybudda Посмотреть сообщение
char buf[strlen(str) + 2],
на это
C
1
char buf[STR_LEN]
иначе в Visual Studio компилятор выдаст ошибку
 
Текущее время: 09:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru