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

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

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

C++ Отредактировать заданное предложение, удаляя из него те слова, которые уже встречались в предложении раньше
Лишние пробелы C++
Удалить лишние пробелы C++
C++ отредактировать предложение ,удаляя из него лишние пробелы...
C++ Отредактировать текст,удаляя из него слова,которые встречаются в предложении заданное число раз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dickivs
 Аватар для dickivs
46 / 46 / 6
Регистрация: 25.11.2011
Сообщений: 267
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
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 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
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
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     Отредактировать предложение, удаляя из него лишние пробелы
Ответ Создать тему
Опции темы

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