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

считывание без пробелов - C++

Восстановить пароль Регистрация
 
 
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 22:35     считывание без пробелов #1
нужно, чтобы при вводе с клавиатуры текста удалялись пробелы, и на выходе был массив чаров( или 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;
                 }
           }
 
    }
этот код работает до первого пробела, подскажите: что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.02.2013, 22:44     считывание без пробелов #2
Цитата Сообщение от lowlol Посмотреть сообщение
new char[];
Надо указывать размер выделяемого массива.

Добавлено через 2 минуты
И освобождать выделенную память.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
27.02.2013, 22:45     считывание без пробелов #3
Цитата Сообщение от lowlol Посмотреть сообщение
тобы при вводе с клавиатуры текста удалялись пробелы, и на выходе был массив чаров( или string) без пробелов.
ну так просто читаем всё в массив до упора перегруженным >>. Разделители пропускаются
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 22:49  [ТС]     считывание без пробелов #4
Цитата Сообщение от Croessmah Посмотреть сообщение
ну так просто читаем всё в массив до упора перегруженным >>. Разделители пропускаются
можно поподробнее, пожалуйста
C++
1
space[i]>>pole[i];
или как?

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

Добавлено через 2 минуты
И освобождать выделенную память.
мы не знаем исходный размер текста
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
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;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
27.02.2013, 23:19     считывание без пробелов #6
Цитата Сообщение от lowlol Посмотреть сообщение
мы не знаем исходный размер текста
поэтому пытаемся выделить массив нулевого размера?
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:26  [ТС]     считывание без пробелов #7
gray_fox, что делает 7я строка?

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

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

Добавлено через 1 минуту
Можно ведь просто взять, попробовать скомпилировать и посмотреть, что получиться самому: http://ideone.com/0ccipU .
lowlol
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, у меня отображалось только то, что я ввел
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.02.2013, 23:41     считывание без пробелов #12
lowlol, да, будет так делать, пока в потоке ввода что-нибудь есть.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
27.02.2013, 23:42     считывание без пробелов #13
оператор >> игнорирует пробельные символы
lowlol
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;}
   }
или есть способ легче?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
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 минут
Только тут придётся ещё перед добавлением проверять на пробел самому.
lowlol
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

вот так ругается в последнем коде
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
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);
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 23:59  [ТС]     считывание без пробелов #18
gray_fox, я правильно понял, что 1 в параметрах append так как считываем по одному символу?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.02.2013, 00:01     считывание без пробелов #19
Цитата Сообщение от lowlol Посмотреть сообщение
что 1 в параметрах append так как считываем по одному символу?
Добавляешь одну копию tmp в конец str. http://en.cppreference.com/w/cpp/str..._string/append , если особо интересно, я наизусть это всё не знаю)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 00:03     считывание без пробелов
Еще ссылки по теме:

Нужно вывести количество (цифрой) символов без пробелов C++
Строки: посчитать количество символов без пробелов C++
Чтение строки без игнорирования пробелов C++

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

Или воспользуйтесь поиском по форуму:
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
28.02.2013, 00:03  [ТС]     считывание без пробелов #20
gray_fox, вроде все понял, спасибо за разъяснения
Yandex
Объявления
28.02.2013, 00:03     считывание без пробелов
Ответ Создать тему
Опции темы

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