Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Работа со строками 
V
    Опции темы
Be_Happy
Дата 20.11.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Дан произвольный текст.Отредактировать его так, чтобы между словами был ровно один пробел и предложения в тексте разделялись ровно двумя пробелами.Желание пояснение сток в программе.
PM MAIL   Вверх
Be_Happy
Дата 20.11.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



=)

Это сообщение отредактировал(а) Be_Happy - 21.11.2007, 18:28
PM MAIL   Вверх
Puoar
Дата 21.11.2007, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.11.2007

Репутация: 1
Всего: 1



Код

#include<iostream.h>
#include<fstream.h>

using namespace std;

char *read_to_dot( char *buf,  fstream &file )
{
 ...
return buf;
}



int main()
{
fstream file( ".\\data.txt", ios::in )

if( !file )
 {
  // cвой код
  // ошибка открытия файла
 return 1;
 }

read_to_dot( buf, file );

return 0;
}

Напиши функцию read_to_dot, чтоб она считывала строку до первого символа точка, или хотяб попробуй... Далше подскажу если сам не зделаешь...
PM MAIL   Вверх
GIK
Дата 21.11.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Цитата

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

 smile  smile

Добавлено через 4 минуты и 44 секунды
Цитата

Отредактировать его так, чтобы между словами был ровно один пробел 

Тут без библиотеки не обойтись, надо подключать словарь, чтобы определять существование слова, а иначе никак  smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
tux32
Дата 21.11.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Цитата(GIK @  21.11.2007,  09:18 Найти цитируемый пост)
Тут без библиотеки не обойтись, надо подключать словарь, чтобы определять существование слова, а иначе никак  

Здесь, наверное, имеется в виду сокращение кол-ва пробелов между словами и предложениями до одного и двух соответственно. предложения разделяются точкой, как уже заметил Puoar. smile  


PM MAIL   Вверх
GIK
Дата 21.11.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Цитата

предложения разделяются точкой, как уже заметил Puoar. 

А, дык это легко, думаю что Be_Happy, справится, а если нет, то помогут ему быстро smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Be_Happy
Дата 21.11.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Puoar, мы функцию read_to_dot не проходили,а задание уже задали, так что напиши всю прогу,если не трудно, желательно с пояснениями.
tux32, прально понял условие, можно просто набор букв, но где начинается пробел там уже другое слово,а предложение после точуи.

Это сообщение отредактировал(а) Be_Happy - 21.11.2007, 18:29
PM MAIL   Вверх
Oleg_Ci
Дата 21.11.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Насочинял smile 
Код

// MS 2005
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

// Функция для поиска двойных пробелов
bool pred( char c1, char c2 ){
    if( c1 == ' ' && c2 == ' ' ) return true;
    else return false;
}

int main(){
    string text; // здесь будет текст
    getline( cin, text ); // считываем текст с консоли
    text.erase( unique( text.begin(), text.end(), pred ), text.end()); // удаляем лишние пробелы
    for( string::size_type pos = 0; (pos=text.find('.', pos)) != string::npos; ) // поиск точки (конца предложения)
        if( text[++pos] == ' ' ) text.insert( pos, 1, ' ' ); // если после точки есть пробел то всавляем ещё один
        else text.insert( pos, 2, ' ' ); // если пробела нет то всавляем два побела
    cout << "\n\n\n\n" << text; // вывод результата
    
    cin.sync(); // очистка ввода
    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
Oleg_Ci
Дата 21.11.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Без <algorithm>
Код

#include <iostream>
#include <string>
using namespace std;

int main(){
    string text; // здесь будет текст
    getline( cin, text ); // считываем текст с консоли
    string::size_type pos, end;

    for( pos = 0; (pos=text.find(' ', pos)) != string.npos; ){ // поиск пробела
        end = text.find_first_not_of( ' ', pos ); // поиск начала слова за пробелами
        text.erase( ++pos, end-pos ); // удаление лишних пробелов
    }
    
    for( pos = 0; (pos=text.find('.', pos)) != string::npos; ) // поиск точки (конца предложения)
        if( text[++pos] == ' ' ) text.insert( pos, 1, ' ' ); // если после точки есть пробел то всавляем ещё один
        else text.insert( pos, 2, ' ' ); // если пробела нет то всавляем два побела

    cout << "\n\n\n\n" << text; // вывод результата
    
    cin.sync(); // очистка ввода
    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
Be_Happy
Дата 22.11.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Oleg_Ci, а более просто это можно написать, чтобы поменьше слов в цикле?
PM MAIL   Вверх
Be_Happy
Дата 7.12.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Что делает 8 строчка и как называются функции которые записаны через точку(10, 11, 12, 15, 16, 17 строчки)?
PM MAIL   Вверх
Oleg_Ci
Дата 10.12.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Код

for( pos = 0; (pos=text.find(' ', pos)) != string.npos; ){ // поиск пробела
Ищет пробелы в строке... smile 
Код

text.find(' ', pos) // поиск пробела в text, начиная с позиции pos

text.find_first_not_of( ' ', pos ) // поис первого символа не являющегося пробелом начиная с позиции pos

text.erase( ++pos, end-pos ) // удаление символов с позиции pos+1(конец слова) , количеством end-pos ( отнимаем от позиции начала следующего слова позицию конца первого слова, т.е. от начала второго отнять конец первого получим количество пробелов между ними)

text.insert( pos, 1, ' ' ) // Вставляем в позицию pos один символ пробела

(pos=text.find(' ', pos)) != string.npos // функция find возвращает позицию пробела, в случае если за позицией pos до конца слова нет пробелов, то возвращается значение npos
// так что цикл:
for( pos = 0; (pos=text.find(' ', pos)) != string.npos; ) // устанавливает pos=0 (в начало слова), ищет каждый пробел до тех пор пока они есть( т.е. до конца слова)

PM MAIL   Вверх
Be_Happy
Дата 14.12.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Oleg_Ci, спасибище тебе, зачёт получил,осталось курсовую и всё вобще отлично=)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.