Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
1

Считывание текста и удаление в нем пробелов

27.02.2013, 22:35. Показов 3409. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
нужно, чтобы при вводе с клавиатуры текста удалялись пробелы, и на выходе был массив чаров( или string) без пробелов.
например:
вводим:123 456 789
а на выходе массив с элементами: 123456789
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
    {
       int n;
       char *spaces = new char[];
       cin>>spaces;
       n=strlen(spaces);
       char *pole = new char[];
       int z=0;
       for (int i=0; i<n; i++)
           {
             if (spaces[i]!=' ')
                 {
                   pole[z]=spaces[i];
                   z++;
                   cout<<spaces[i]<<endl;
                 }
           }
 
    }
этот код работает до первого пробела, подскажите: что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2013, 22:35
Ответы с готовыми решениями:

Удаление из текста лишних пробелов
Задание: Удалить из текста повторяющиеся знаки пробела и те пробелы, которые стоят перед абзацем. ...

Удаление лишних пробелов из текста
Здравствуйте, нужна помощь в написании конечного автомата. Удаление лишних пробелов из текста нужна...

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно написать программу со...

Игнорирование пробелов при считывание
Здравствуйте, друзья. передо мной стоит задача проверить, является ли строка палиндромом. я...

20
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 22:44 2
Цитата Сообщение от lowlol Посмотреть сообщение
new char[];
Надо указывать размер выделяемого массива.

Добавлено через 2 минуты
И освобождать выделенную память.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
27.02.2013, 22:45 3
Цитата Сообщение от lowlol Посмотреть сообщение
тобы при вводе с клавиатуры текста удалялись пробелы, и на выходе был массив чаров( или string) без пробелов.
ну так просто читаем всё в массив до упора перегруженным >>. Разделители пропускаются
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 22:49  [ТС] 4
Цитата Сообщение от Croessmah Посмотреть сообщение
ну так просто читаем всё в массив до упора перегруженным >>. Разделители пропускаются
можно поподробнее, пожалуйста
C++
1
space[i]>>pole[i];
или как?

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
Надо указывать размер выделяемого массива.

Добавлено через 2 минуты
И освобождать выделенную память.
мы не знаем исходный размер текста
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 23:18 5
Цитата Сообщение от lowlol Посмотреть сообщение
мы не знаем исходный размер текста
Ну и что? Нельзя выделить "не знаю сколько" памяти, так устроен оператор new[]. Можно взять std::string, там не будет таких проблем:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
 
int main() {
   std::string str;
   for (std::stirng tmp; std::cin >> tmp; ) {
      str.append(tmp);
   }
   std::cout << str << std::endl;
}
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
27.02.2013, 23:19 6
Цитата Сообщение от lowlol Посмотреть сообщение
мы не знаем исходный размер текста
поэтому пытаемся выделить массив нулевого размера?
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:26  [ТС] 7
gray_fox, что делает 7я строка?

Добавлено через 37 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
поэтому пытаемся выделить массив нулевого размера?
ну компилится же, до первого пробела)
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 23:28 8
Цитата Сообщение от lowlol Посмотреть сообщение
gray_fox, что делает 7я строка?
Добавляет tmp в конец str.
1
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:31  [ТС] 9
gray_fox, т.е. этот код вводит с клавиатуры в строку, а как пробелы мне убрать?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 23:36 10
lowlol, нет, он читает строки до пробела и добавляет их к str.

Добавлено через 39 секунд
Там грамм. ошибка, кстати, писал на память.

Добавлено через 1 минуту
Можно ведь просто взять, попробовать скомпилировать и посмотреть, что получиться самому: http://ideone.com/0ccipU .
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:40  [ТС] 11
gray_fox, допустим, если я введу с клавиатуры: 123 456
то он посчитает 123 как tmp, добавит к str, потом аналогично сделает с 456?

Добавлено через 57 секунд
gray_fox, я чекнул в VS, у меня отображалось только то, что я ввел
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 23:41 12
lowlol, да, будет так делать, пока в потоке ввода что-нибудь есть.
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.02.2013, 23:42 13
оператор >> игнорирует пробельные символы
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:45  [ТС] 14
gray_fox, а закрыть поток я могу как-нибудь так:
C++
1
2
3
4
5
6
for (string tmp;cin >> tmp; ) 
   {
      str.append(tmp);
      if (tmp == ' ') //здесь как мне enter записать?
             {break;}
   }
или есть способ легче?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 23:52 15
Цитата Сообщение от lowlol Посмотреть сообщение
gray_fox, я чекнул в VS, у меня отображалось только то, что я ввел
Потому что "конец ввода" - EOF. В винде вроде Ctrl+Z добавляет.

Добавлено через 1 минуту
Цитата Сообщение от lowlol Посмотреть сообщение
а закрыть поток я могу как-нибудь так:
Если ты хочешь читать до перевода строки, то проще будет читать посимвольно и проверять каждый символ перед добавлением на '\n', примерно так:
C++
1
2
3
for (char tmp; (std::cin >> tmp) && (tmp != '\n'); ) {
   str.append(tmp);
}
Добавлено через 5 минут
Только тут придётся ещё перед добавлением проверять на пробел самому.
1
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:53  [ТС] 16
gray_fox,
1 IntelliSense: отсутствуют экземпляры перегруженная функция "std::basic_string<_Elem, _Traits, _Alloc>::append [с _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]", соответствующие списку аргументов
типы аргументов: (char)
тип объекта: std::string

вот так ругается в последнем коде
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.02.2013, 23:55 17
т.е если предыдущее поправить.
C++
1
2
3
4
5
for (char tmp; (std::cin >> tmp) && (tmp != '\n'); ) {
   if (tmp != ' ') {
      str.append(1, tmp);
   }
}
Добавлено через 1 минуту
Цитата Сообщение от lowlol Посмотреть сообщение
отсутствуют экземпляры перегруженная функция
а, ну да, для добавления символа:
C++
1
str.append(1, tmp);
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:59  [ТС] 18
gray_fox, я правильно понял, что 1 в параметрах append так как считываем по одному символу?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
28.02.2013, 00:01 19
Цитата Сообщение от lowlol Посмотреть сообщение
что 1 в параметрах append так как считываем по одному символу?
Добавляешь одну копию tmp в конец str. http://en.cppreference.com/w/c... ing/append , если особо интересно, я наизусть это всё не знаю)
1
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
28.02.2013, 00:03  [ТС] 20
gray_fox, вроде все понял, спасибо за разъяснения
0
28.02.2013, 00:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2013, 00:03
Помогаю со студенческими работами здесь

Дано предложение. Определить количество пробелов в нем
Дано предложение. Определить количество пробелов в нем.

Удаление пробелов
Помогите пожалуйста доделать программу(удаление пробелов в начале и в конце строки). Само...

Удаление пробелов
Доброго времени суток ув. форумчане! Дали задание до 6.11, вчера вроде понял как делать, а сегодня...

Удаление пробелов
Доброго времени суток ув. форумчане! Дали задание до 6.11, вчера вроде понял как делать, а сегодня...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru