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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tschainik
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 10
#1

Отредактировать предложение, удаляя из него лишние пробелы - C++

06.06.2013, 21:03. Просмотров 763. Ответов 5
Метки нет (Все метки)

Составить программу, в которой с клавиатуры вводится строка символов и отредактировать предложение, удаляя из него лишние пробелы оставляя только по одному пробелу между словами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 21:03     Отредактировать предложение, удаляя из него лишние пробелы
Посмотрите здесь:

C++ Удалить лишние пробелы в строке
C++ Отредактировать заданное предложение, удаляя из него те слова, которые уже встречались в предложении раньше
Отредактировать заданное предложение... C++
Лишние пробелы C++
Удалить лишние пробелы C++
C++ Отредактировать предложение, удаляя из него лишние пробелы
C++ Отредактировать текст,удаляя из него слова,которые встречаются в предложении заданное число раз
C++ Убрать лишние пробелы
Удалить лишние пробелы C++
Отредактировать заданное предложение, удаляя из него все слова с нечетными номерами и переворачивая слова с четными номерами C++
C++ Отредактировать предложение, удаляя все слова на четных позициях.
Отредактировать текст, удалив лишние пробелы и оставив только по одному пробелу C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dickivs
46 / 46 / 6
Регистрация: 25.11.2011
Сообщений: 270
Завершенные тесты: 1
06.06.2013, 21:39     Отредактировать предложение, удаляя из него лишние пробелы #2
Решению данной задачи может помочь пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream> 
using std::cout; 
using std::endl; 
 
#include <string> 
using std::string; 
int main() 
{ 
    string string1( "The values in any left subtree" 
                    "\nare less than the value in the" 
                    "\nparent node and the values in" 
                    "\nany right subtree are greater" 
                    "\nthan the value in the parent node" ); 
 
    cout << "Original string: \n" << string1 << endl << endl; 
 
    // удалить все символы начиная с позиции 62(включительно) 
    //до конца stringl 
    string1.erase( 62 ); 
 
    // вывести новую строку 
    cout << "Original string after erase:\n" << string1 
         << "\n\nAfter first replacement:\n"; 
 
    int position = string1.find( " " ); // найти первый пробел 
 
    // заменить все пробелы точками 
    while ( position != string::npos ) 
    { 
        string1.replace( position, 1, "." ); 
        position = string1.find( " ", position + 1 ); 
    } 
     
    cout << string1 << endl;
return 0; 
}
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,945
Записей в блоге: 2
Завершенные тесты: 1
06.06.2013, 21:45     Отредактировать предложение, удаляя из него лишние пробелы #3
C++
1
2
3
4
5
6
7
8
void Trim_SD(char * dest, char * source){
    for(char *p1=source,*p2=dest; (*p2=*p1);++p1,++p2){
        if(*p1!=' ') continue;
        for(;*p1==' ';++p1);
            p2+=(p2==dest || !(*p1))?0:1;
            *p2=*p1;
    }
}
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
06.06.2013, 22:38     Отредактировать предложение, удаляя из него лишние пробелы #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//============================================================================
// Name        : exclude_unnecessary_spaces.cpp
// Author      : UranFlex
// Version     : 0.1 alpha
// Copyright   : GNU GPL
// Description : С клавиатуры вводится строка символов - отредактировать предложение,
//               удаляя из него лишние пробелы оставляя только по одному пробелу между словами.
//               C++, Ansi-style.
//============================================================================
 
#include <iostream>
#include <cstring>
using namespace std;
 
// функция удаляет все лишнии пробелы в строке
// лишними пробелами являются:
// 1) пробел вначале строки;
// 2) пробел в конце строки
// 3) все подряд идущие пробелы в строке, если их количество более 1 подряд
void ExcludeSpaces( string& str );
 
int main() {
 
    string str; // контейнер для хранения вводимой строки
 
    cout << "Введите строку" << endl;// запрашиваем у пользователя строку
    getline( cin, str ); // сохраняем ее
 
    ExcludeSpaces( str ); // чистим от лишних пробелов
 
    cout << str << endl; // выводим на экран
 
    return 0;
}
 
void ExcludeSpaces( string& str ){
 
    string::iterator iter = str.begin(); // позиционируем итератор на начало строки
 
    // в цикле перебираем все символы строки
    while ( iter != str.end() ){
        if ( !isspace( *iter ) ) // если очередной символ не пробел
            ++iter; // то переводим итератор на следующий символ
        else if ( isspace( *( iter + 1 ) ) ) // а если пробел и следующий за ним тоже пробел,
            // то удаляем текущий очередной символ
            // т.е. после удаления текущего символа следующий за ним пробел остается в строке
            // и итератор будет как раз на этот следующий пробел и указывать
            str.erase( iter );
        else ++iter; // а если это одиночный пробел, то переводим итератор на следующий символ
    }
 
    // после цикла между словами будет только по одному пробелу, но если были пробелы ( хоть один хоть много ) вначале и/или в конце строки,
    // то в этом месте останется по одному пробелу, ведь цикл удаляет только подряд идущие пробелы, оставляя только один пробел
 
    // соответственно проверяем вначале строки есть ли пробел
    if ( isspace( *str.begin() ) ) // если есть
        str.erase(  str.begin() );  // то удаляем его
 
    // то же самое и в конце строки
    if ( isspace( *(str.end() - 1 ) ) )
        str.erase(  (str.end() - 1)  );
}
MrGluck
Ворчун
Эксперт CЭксперт С++
6626 / 3817 / 500
Регистрация: 29.11.2010
Сообщений: 10,072
06.06.2013, 23:14     Отредактировать предложение, удаляя из него лишние пробелы #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <sstream>
#include <string>
 
using namespace std;
 
int main()
{
    ifstream ifs("input.txt");
    if (!ifs)
        return 1;
    ofstream o("output.txt");
    string str; // временная переменная для хранения слова
    while (!ifs.eof() && getline(ifs, str))
    {
        istringstream ist(str); // инициализируем строкой
        string word;
        while (ist >> word)
            o << word << " ";
        o << endl;
    }
}
Добавлено через 35 минут
Croessmah, можно даже так:
C++
1
p2 += (p2 != dest && *p1);
Croessmah
06.06.2013, 23:21     Отредактировать предложение, удаляя из него лишние пробелы
  #6

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Croessmah, можно даже так:
код написан во времена, когда я не ведал о таких вещах с тех пор его не переделывал

Yandex
Объявления
06.06.2013, 23:21     Отредактировать предложение, удаляя из него лишние пробелы
Ответ Создать тему
Опции темы

Текущее время: 07:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru