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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
akik
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 26
#1

Рекурсия. Удаление лишних пробелов - C++

15.05.2014, 21:42. Просмотров 2538. Ответов 59
Метки нет (Все метки)

Доброго времени суток! Подскажите как реализовать с помощью рекурсии задачу: описать функцию, которая удаляет из строки все лишние пробелы.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 21:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсия. Удаление лишних пробелов (C++):

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

Удаление лишних пробелов - C++
Помогите пожалуйста с задачей: Разработать алгоритм и программу для удаления лишних пробелов в тексте (лишними считать> 1 пропуска).

Удаление лишних пробелов - C++
Доброго времени суток уважаемые профики С++. Хотелось бы узнать как сделать функцию удаление лишних пробелов? То есть что бы по 1...

Удаление лишних пробелов - C++
Знаю, тема изъёрзана) но вот код, и своих функций он не выполняет( #include <iostream> using namespace std; int main() {...

Удаление лишних пробелов - C++
И снова здравствуйте, Господа эксперты. Помогите пожалуйста Удалить в тексте лишние пробелы. Данные считать из файла и вывести в файл. Вот...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
srin
25 / 25 / 11
Регистрация: 05.05.2014
Сообщений: 115
15.05.2014, 23:41 #2
1. А какие пробелы лишние?
2. Алгоритм что-то типо этого:
2.1 функция main()

2.2 вызываем функцию "рекурсия"(). Она выглядит так:
2.3 ищем лишний пробел(ы) :
2.3.1 если есть - удаляем лишний пробел(ы) и переходим к пункту 2.2 (т.е. вызываем опять такую же функцию)
2.3.2 если нет - выходим из функции

вроде так
1
Людвиг Бодмер
347 / 344 / 132
Регистрация: 29.03.2013
Сообщений: 849
Завершенные тесты: 4
16.05.2014, 16:00 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
akik,
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
#include "string.h"
#include <iostream>
 
void DelSpace(char* str, int ind)
{
    int i;
    if ((str[ind]==' ')&&(str[ind+1])==' ')
        DelSpace(str,ind+1);
    for (i = ind; i < strlen(str)-1; i++)
    {
        str[i]=str[i+1];
    }
        str[i]=0;
    
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    
    char str[256];
    int i;
    gets (str);
    for (i=0;i<strlen(str);i++)
    { if ((str[i]==' ')&&(str[i+1]==' '))
        DelSpace(str,i+1);
    }
    std::cout<<str<<"\n";
    system("pause");
    return 0;
}
2
akik
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 26
16.05.2014, 18:37  [ТС] #4
Огромное спасибо))
0
JleHuH213
1 / 1 / 1
Регистрация: 22.10.2012
Сообщений: 161
28.04.2015, 21:42 #5
Подскажите как сделать что бы была функция в другом файле?
0
Людвиг Бодмер
347 / 344 / 132
Регистрация: 29.03.2013
Сообщений: 849
Завершенные тесты: 4
29.04.2015, 10:31 #6
JleHuH213, например так:
main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "Another.h"
int _tmain(int argc, _TCHAR* argv[])
{
    
    char str[256];
    int i;
    gets (str);
    for (i=0;i<strlen(str);i++)
    { if ((str[i]==' ')&&(str[i+1]==' '))
        DelSpace(str,i+1);
    }
    std::cout<<str<<"\n";
    system("pause");
    return 0;
}
Another.h:
C++
1
void DelSpace(char* str, int ind);
Another.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
void DelSpace(char* str, int ind)
{
    int i;
    if ((str[ind]==' ')&&(str[ind+1])==' ')
        DelSpace(str,ind+1);
    for (i = ind; i < strlen(str)-1; i++)
    {
        str[i]=str[i+1];
    }
        str[i]=0;
}
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
29.04.2015, 11:32 #7
JleHuH213, это ты целый год задачу решаешь?
0
Людвиг Бодмер
29.04.2015, 11:36
  #8

Не по теме:

Kuzia domovenok, он же не топикстартер

0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,678
29.04.2015, 12:52 #9
Людвиг Бодмер, А без циклов осилим?
Строка не начинается с пробелов.
Циклы вообще не используем.
static нельзя.
в функцию подается только строка и ничего больше'

Интересно просто. Это 100% возможно.
Да и решать рекурсию так интереснее. Чтоб без циклов. Она на то и рекурсия. Мне ответ решения совсем не нужен. Это просто любопытство.
0
Людвиг Бодмер
347 / 344 / 132
Регистрация: 29.03.2013
Сообщений: 849
Завершенные тесты: 4
29.04.2015, 14:04 #10
daslex, как насчет такого варианта? :
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
#include <iostream>
#include <string>
 
void DelSpace(std::string str)
{
    int i;
    i = str.find("  ");
    std::string rstr;
    if ( i > -1 )
      {
        rstr = str.replace( i,2," " );
        DelSpace (rstr); 
      }
      else if ( i == -1 )
      {
        std::cout << str << std::endl;    
      }  
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string str;
    getline(std::cin,str); 
    DelSpace(str);
    system("pause");
    return 0;
}
1
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,678
29.04.2015, 14:21 #11
Норм. Условия соблюдены. Но есть вариант без stl. , когда строка массив символов.

Добавлено через 7 минут
Когда уже обработанную строку внутри рекурсивной функции можно в другие функции подсовывать вне рекурсивной функции .
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
29.04.2015, 22:44 #12
Цитата Сообщение от daslex Посмотреть сообщение
А без циклов осилим?
Строка не начинается с пробелов.
Циклы вообще не используем.
static нельзя.
в функцию подается только строка и ничего больше'
Интересно просто. Это 100% возможно.
Да и решать рекурсию так интереснее. Чтоб без циклов. Она на то и рекурсия. Мне ответ решения совсем не нужен. Это просто любопытство.
Ну вот наконец-то кто-то предложил интересные развлечения. Тоько зачем же ограничение, что строка не начинается с пробелов - мы и общий случай можем без единого гвоздя цикла Ну и без статиков и прочих внешних глобальных растяжек.
C++
1
2
3
4
5
6
7
8
9
char *task(char *b, char *e) {bool se = *e==' ', sb = *b==' ';
   if (se) *e=0; return sb || se ? task(b+sb, e-se) : b;}
char *end(char *p) {return *p ? end(p+1) : p-1;}
 
int _tmain(int argc, _TCHAR* argv[]) {
    char s[] = "            A string without spaces             ";
    cout << ">" << task(s, end(s)) << "<" << endl;
    system("pause"); return 0;
}
2
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,678
29.04.2015, 22:53 #13
_Ivana, char s[] = "____________A string_________without___________spaces "; в gcc серединный не убирает (подчеркивания=пробел)
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
29.04.2015, 22:55 #14
Какие серединные? Надо же лишние только удалить - СокрЛП() в 1С А серединные - не лишние. Хотя и с серединными не сложно.
0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,678
29.04.2015, 23:00 #15
Нет. Надо выполнить зачистку по всей строке. Любое множество подряд идущих пробелов должно стать одним пробелом. Это условие задачи этой вот темы, в которую мы "окунулись"

Добавлено через 1 минуту

Не по теме:

Все, что я смог решить по определению не сложно

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2015, 23:00
Привет! Вот еще темы с ответами:

Удаление лишних пробелов с помощью вспомогательного массива - C++
имеется массив. пробелов между словами в первом случае 2 во втором 3. требуется сократить кол-во пробелов до 1 между каждым словом. ...

Удаление лишних пробелов в начале и конце строки. - C++
Нужно написать функцию char*alltrim(char*string) для удаления пробелов в начале и конце строки с помощью указателей. Помогите завершить...

Реализовать функцию UnSpace(s), возвращающую строку, полученную удалением из исходной всех лишних пробелов - C++
Реализовать функцию UnSpace(s), возвращающую строку, полученную удалением из исходной всех лишних пробелов (т.е. последовательность из N...

Удаление лишних символов - C++
Имеется файл txt.txt в котором 50 000 строк, просто физически это обработать тяжело. Нужно удалить все эти знаки ( ) | и 0. (Левая...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.04.2015, 23:00
Ответ Создать тему
Опции темы

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