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

Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
murod
 Аватар для murod
-2 / 7 / 2
Регистрация: 04.11.2010
Сообщений: 163
22.07.2011, 17:35     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #1
Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2011, 17:35     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов
Посмотрите здесь:

Дана символьная строка, удалить из нее путем сдвига все цифры C++
Дана строка S1. Удалить в ней все вхождения символа '*' C++
Удалить группы пробелов, которыми начинается и заканчивается строка, а каждую внутреннюю группу пробелов заменить одним пробелом C++
C++ Вычитатель пробелов(удалить из текста лишние пробелы)
C++ Дана строка символов. Заменить в ней все пробелы на табуляции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
22.07.2011, 17:37     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #2
и в чом затык?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.07.2011, 17:42     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
#define SIZE 20
 
int main() {
    char str1[SIZE] = "a db nn  d";
    char str2[SIZE] = { 0 };
    int i, j;
 
    for (i = 0, j = 0; str1[i] != '\0' && i < SIZE; ++i) {
        if (str1[i] != ' ') {
            str2[j++] = str1[i];
        }
    }
 
    printf("%s\n", str2);
    return 0;
}
murod
 Аватар для murod
-2 / 7 / 2
Регистрация: 04.11.2010
Сообщений: 163
22.07.2011, 17:43  [ТС]     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #4
а если строка вводится с клавиатуры ?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.07.2011, 17:45     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #5
Цитата Сообщение от murod Посмотреть сообщение
а если строка вводится с клавиатуры ?
А это уже сам, чей не маленький
murod
 Аватар для murod
-2 / 7 / 2
Регистрация: 04.11.2010
Сообщений: 163
22.07.2011, 17:45  [ТС]     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #6
а понял все большое спасибо !
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
22.07.2011, 18:14     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #7
murod,

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
#include <string>
 
int main()
{
   std::string str = "this is test string";
   str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
   std::cout << str << std::endl;
 
   return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.07.2011, 21:58     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #8
Вот вариант накидал, обработка в одном буфере, в параметре можешь задавать любой символ.
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
#include <stdio.h>
 
 
char*  chr_del(char* str, char ch) {
      char* src = str;
      char* ca, *cb;
      while( *str ) {
          if( *str == ch ){
                ca = str;
                cb = str + 1;
                while(*ca++ = *cb++);
                continue;
          }
          *str++;
      }
      return src;
}
 
 
 
int main(void) {
 
   char buf[255];
   printf("input string: ");
   gets(buf);
 
   chr_del(buf, ' ');
   printf("result: %s\n", buf);
 
   getchar();
   return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.07.2011, 22:19     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #9
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
/* ANSI C 99 */
/* удалить все пробелы... */
 
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
char * remove_spaces(char * str){
    char buf[strlen(str) + 1], * b = buf, * s = str;
    
    while ( *s ){
        if ( ! isspace(*s) )
            *b++ = *s;
        ++s;
    }
    *b = '\0';
    
    return strcpy(str, buf);
}
 
int main(void){
    char buf[BUFSIZ];
    
    while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 )
        printf("Result: %s\n", remove_spaces(buf));
    
    exit(0);
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
22.07.2011, 22:31     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #10
easybudda, в C99 такое:
C
1
char buf[strlen(str) + 1]
разрешено?

Добавлено через 9 минут
Нашел, действительно в C99 так можно, незнал.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.07.2011, 22:33     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #11
Kastaneda, ага. Там, кстати, ещё много полезного...
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.07.2011, 23:21     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #12
Цитата Сообщение от easybudda Посмотреть сообщение
Kastaneda, ага. Там, кстати, ещё много полезного...
А как оно так по-хитрому там устроено ?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.07.2011, 00:32     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от asics Посмотреть сообщение
А как оно так по-хитрому там устроено ?
Из книжки Р. Лав "Linux системное программирование":
речь о системном вызове alloca(), который как-раз так же память выделяет...
... Эта память живёт в стеке и автоматически освобождается, когда вызывающая функция возвращает результат.
И тут примерно так же - при каждом вызове от стека кусок нужной длинны отрезается, при выходе возвращается...
Там же дальше:
VLA (массивы переменной длинны) позволяют избегать нагрузки, создаваемой выделением динамической памяти практически так же, как это делает системный вызов alloca()
Да и вообще очень интересная книжка, рекомендую...
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.07.2011, 02:08     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #14
C
1
 char buf[strlen(str) + 1]
хм...интересно, почему такая фича до сих пор не в стандарте С++
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
23.07.2011, 09:35     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #15
Цитата Сообщение от Maxwe11 Посмотреть сообщение
C
1
 char buf[strlen(str) + 1]
хм...интересно, почему такая фича до сих пор не в стандарте С++
Цитата Сообщение от easybudda Посмотреть сообщение
речь о системном вызове alloca(), который как-раз так же память выделяет...
Вот alloca(), функция очень не безопасна, думаю поэтому она не прежилась и в С++ врядли такое появится.
ElvenDragon
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
23.07.2011, 11:49     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
  
int main() {
  int i;
  string op = "trop lop kop";
  cout << op << '\n';
  i = count(op.begin(), op.end(), ' ');
  remove_copy(op.begin(),op.end(),op.begin(),' ');
  op.resize(op.size() - i);
  cout << op << '\n';
  return 0;
}
О так можно.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
23.07.2011, 14:20     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов #17
Цитата Сообщение от Maxwe11 Посмотреть сообщение
хм...интересно, почему такая фича до сих пор не в стандарте С++
Нашел в 0x, частично будет поддержка подобных вещей, т.е. сейчас такой код является ошибочным:
C++
1
2
3
int getval(){ return 5;}
///////////////////////////////////
int mas[getval()+2];
В 0x будет введено ключевое слово constexpr, которое позволяет пользователю гарантировать, что или функция или конструктор объекта возвращает константу времени компиляции. Т.е. слудующий код будет допустимым:
C++
1
2
3
constexpr int getval(){ return 5;}
///////////////////////////////////
int mas[getval()+2];
Но тут все в "рамках приличия", память выделяется на этапе компиляции, т.е. это не тоже самое, что в С99, но все же - удобство налицо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2011, 20:13     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов
Еще ссылки по теме:

C++ Дана строка. Удалить из нее все лишние пробелы

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

Или воспользуйтесь поиском по форуму:
easybudda
23.07.2011, 20:13     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов
  #18

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
функция очень не безопасна
Любая дополнительная возможность требует ответственного подхода. С++ абсолютно в духе языков высокого уровня избавляется по мере возможности от подобных "небезопасных" конструкций. В силу сложности этого языка может оно и правильно - любой дополнительный "подводный камень" может много крови попортить. Вот по этому мне и нравится язык С...

Yandex
Объявления
23.07.2011, 20:13     Дана строка удалить все пробелы или просто присвоить в другую строку без пробелов
Ответ Создать тему
Опции темы

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