1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Помогите друзья! Вроде несложное задание а чего то не получается. Задание такое: Удалить из строки самое длинное слово. Проше если не сложно написать текст проги здесь. Заранее благодарен.
int main() { char s[256] = "begin end starting finishing f\0"; int len = 0, max_len = 0; char *p, *pp, *start;
// gets(s);
// изначально и P и PP указывают на начало обрабатываемой строки S for(p = pp = s; ;) {
// В следующем фрагменте находится длина самого длинного слова в строке (len) // и сохраняется указатель на его начало (start)
// если очередной символ (*p - это разыменование указателя на символ, // значит это и есть сам символ) - НЕ конец строки (строки в С заканчиваются // нулем, соответственно *p будет истиной если конец строки не достигнут, и // ложью если мы уже пришли на конец строки ) и является буквой или цифрой // (это проверяется готовой библиотечной функцией isalnum), то просто увеличиваем // длину слова if(*p && isalnum(*p)) { len += 1; } else { // раз мы здесь - значит добрались до конца строки или просто слово закончилось // в обоих случаях надо проверить, не является ли только что закончившееся слово // более длинным, чем то, что было самым длинным раньше... if(max_len < len) { max_len = len; start = pp; // да, последнее слово длиннее - запоминаем его начало и длину }
// в любом случае после обработки слова надо сбросить счетчик длины, // и запомнить в PP позицию следующего (за текущим) символа, вдруг ПОТОМ выяснится, // что именно там начинается еще более длинное слово... len = 0; pp = p + 1; }
// если еще не добрались до конца строки - продвигаемся дальше, // иначе просто завершаем цикл поиска самого длинного слова... if(*p) p++; else break; }
// вот теперь у нас в start - указатель на начало слова, которое надо удалить, // а в max_len - его длинна.
// Как удалять слово? Правильно, копировать символы с позиции start + max_len // (сразу ПОСЛЕ удаляемого слова) в позицию start - заменяя удаляемое слово тем, // что идет следом за ним...
// Вот и делаем то, что написано выше: // p - это КУДА будем копировать (приемник); // pp - ОТКУДА будут копироваться символы (источник)
p = start; pp = start + max_len; do { *p++ = *pp; // Копируем символ и увеличиваем индекс ПРИЕМНИКА } while(*pp++); // Пока ИСТОЧНИК не достиг конца строки, его тоже увеличивать
// Все, слово удалено printf("%s\n", s, max_len); return 0; }
Подойдет?
Сообщение отредактировано: volvo - 26.12.2007 0:01