С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
#1

Удаление лишних пробелов - C++

25.01.2012, 00:14. Просмотров 1704. Ответов 11
Метки нет (Все метки)

Знаю, тема изъёрзана)
но вот код, и своих функций он не выполняет(

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
[CPP]
#include <iostream>
using namespace std;
 
int main()
{
    char st[20] = {"privet  med   med"};
    int k = 0;
    for (int i = 0; i < 20; i++)
    cout << st[i];
    cout << endl;
    while (k != 20)
    {
        if(st[k] == ' ' && st[k+1] == ' ' && st[k+1] != '\0')
        {
            for (int j = k ; j < 20; j++)
            {
                st[j] = st[j+1];
            }
                 
        }
        else k++;
    }   
    for (int i = 0; i < 20; i++)
    cout << st[i];
    system("pause");
}
[/CPP]

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

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

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

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

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

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

Рекурсия. Удаление лишних пробелов - C++
Доброго времени суток! Подскажите как реализовать с помощью рекурсии задачу: описать функцию, которая удаляет из строки все лишние пробелы.

11
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.01.2012, 00:37 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    const int N = 20;
    char st[N] = "privet  med   med";
    int k = 0;
    cout << st << '\n';
    while (k < N)
    {
        if(st[k] == ' ' && st[k+1] == ' ')
           for (int j = k ; j + 1 < N; ++j)
           {
              st[j] = st[j+1];
           }     
        else 
           ++k;
    }   
    cout << st;
}
http://liveworkspace.org/code/acfab06a7c137271321ff5fc6c42b77f
1
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
25.01.2012, 01:05  [ТС] #3
Jupiter, спасибо, я уже исправил вот так
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
#include <iostream>
using namespace std;
 
int main()
{
    char st[19] = {"privet  med   med"};
    int k = 0;
    int m = 0;
    for (int i = 0; i < 20; i++)
    cout << st[i];
    cout << endl;
    for (int i = 0; i < 20; i++)
    {
    if(st[i] == ' ' && st[i+1] == ' ')
    m++;
    }
    cout << m;
    while (k != 18 - m)
    {
        if(st[k] == ' ' && st[k+1] == ' ')
        {
            for (int j = k ; j < 20; j++)
            {
                st[j] = st[j+1];
            }
                 
        }
        else k++;
    }   
    for (int i = 0; i < 20; i++)
    cout << st[i];
    system("pause");
}
не радует что постоянно в зависимости от размера строк нужно изменять длину массива
поэтому нужно на указатели перевести
0
ReaLgressA
2 / 2 / 0
Регистрация: 07.01.2012
Сообщений: 6
25.01.2012, 01:37 #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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string str("privet  med   med");
    int k = 0;
    int m = 0;
    cout << str<<endl;
    for (int i = 0; i < str.size(); i++)
    {
        if(str[i]==' '&&str[i+1]==' ')
        m++;
    }
    cout<<m<<endl;
    while (k != str.size())
    {
        if(str[k] == ' ' && str[k+1] == ' ')
            str.erase(k,1);
        else k++;
    }   
    cout<<str<<endl;
    system("pause");
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 11:30 #5
Цитата Сообщение от fruktik Посмотреть сообщение
Удаление лишних пробелов
Знаю, тема изъёрзана)
- ты прав, вот код который выполнеят поставленные функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main()
{
    string text;
    string word;
    stringstream ss;
    cout<<"Enter string\n";
    getline(cin,text);
    ss.str(text);
    cout<<"Moving numereous spaces\n";
    while(ss>>word)
        cout<<word<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
0
Миниатюры
Удаление лишних пробелов  
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 11:32 #6
PS:Такой ввод в VisualStudio 6.0 требует нажатия Enter 2 раза
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
getline(cin,text);
, на 9-й версии всё работает после 1-го нажатия...
0
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
25.01.2012, 13:02 #7
Ещё один вариант (с использованием сишных функций):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string.h>
using namespace std;
 
int main()
{
    char str[128];
    char* ptr=str;
    cin.getline(str,128);
    char before=*ptr++;
    while(*ptr)
    {
 
        if(isspace(*ptr) && isspace(before))
         {  strcpy(ptr,(ptr+1));
            continue;
         }
        before=*ptr;
        ptr++;
    }
    cout<<"result is:\n"<<str;
}
0
-=ЮрА=-
25.01.2012, 13:20
  #8

Не по теме:

Gepar, как я понял из ещё одной темы данного ТС
Работа со строкой без библиотечных функций,
код нужно реализовывать без функций стандартной библиотеки...

0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
25.01.2012, 14:39 #9
Вот как вариант со стандартной библиотекой:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
 
int main()
{
    std::string s( "qwerty    qwerty qwerty  qwerty" );
    for( ; s.find( "  " ) != std::string::npos; s.erase( s.find( "  " ), 1 ) );
    std::cout << s << std::endl;
    return 0;
}
0
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
25.01.2012, 15:00 #10
-=ЮрА=-, ну автор это не писал, если так то пусть напишет свой isspace и strcpy и проблема будет решена.
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 15:37 #11
Цитата Сообщение от Gepar Посмотреть сообщение
-=ЮрА=-, ну автор это не писал, если так то пусть напишет свой isspace и strcpy и проблема будет решена.
- Gepar, всё на много проще, просто нужно написать алгоритм с нуля и примитивно(так обычно просят писать на ранних курсах универа)
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
#include <iostream>
using namespace std;
 
int main()
{
    bool bFlag = true;
    char text[1024];
    cout<<"Enter text\n";
    cin.getline(text,1024);
    int i,j,k;
    for(i = 0; text[i] != '\0'; i++)
    {
        if(text[i] == ' ')
        {
            for(j = 0; text[i + j] != '\0' && bFlag; j++)
            {
                if(text[i + j] != ' ')
                    bFlag = false;
            }
            if(1 < j)
            {
                for(k = i + 1; text[k + j - 2] != '\0'; k++)
                    text[k]  = text[k + j - 2];
                text[k] = '\0';
            }
            bFlag = true;
        }
    }
    cout<<"String after moving numerous spaces\n";
    cout<<text<<endl;
    system("pause");
    return 0;
}
0
Миниатюры
Удаление лишних пробелов  
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 15:39 #12
fruktik, пробуй код выше, алгоритм "вычёркивания" пробелов построен без единой функции стандартной библиотеки или методов от std::string
0
25.01.2012, 15:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2012, 15:39
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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