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

удаление пробелов между словами и буквами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 16:00     удаление пробелов между словами и буквами #1
доброго времени суток, не могли бы вы мне помочь в создании программы которая удаляет удвоенные согласные в любом предложении, но чтоб удаляла а не заменяла на пробелк примеру чтоб было слово "удвоенное" вот так "удвоеая" а не "удвое ая",

вот пример программы которую я показал учителю он утверждает что эта программа не удаляет а просто не видит эти символы:
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
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
    int i=0,n;
    char s[50];
    cout<<"Vvedite tekst\n";
    gets(s);            // Ввод строки
    while (s[i]!='\0')
    {   
        n=i;
        i++;
    }
    n++;
 
    for(i=0;i<n;i++)
        {   
            if(s[i]==s[i+1])
                if(s[i]!='e' || s[i]!='u' || s[i]!='i' || s[i]!='o' ||                  s[i]!='a' || s[i]!='y')
                {
                    i=i+2;
                }
                cout<<s[i];
        }
        
      getchar();
}
ЗАРАНЕЕ СПАСИБО!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2011, 16:00     удаление пробелов между словами и буквами
Посмотрите здесь:

C++ пользователь вводит строчку,а программа выводит количество пробелов между словами в строке.
работа со словами и буквами C++
Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами C++
C++ Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами.
C++ Убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
02.01.2011, 16:23     удаление пробелов между словами и буквами #2
xellboy8,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::string str;
    const std::string byk("BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvXxZz");
    std::cout << "\n\nString -> ";
    getline(std::cin, str);
 
    for(std::string::size_type i = 0; i < str.length() - 1; ++i)
        if(byk.find(str[i]) != std::string::npos &&  str[i] == str[i + 1])
            str.erase(i, 2);
 
    std::cout << str << std::endl;
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.01.2011, 16:30     удаление пробелов между словами и буквами #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <functional>
 
typedef std::string T_str;
 
int main()
{
    T_str str;
    std::cout<<"Enter string: ";
    std::getline(std::cin, str);
    for(size_t i=0; i<str.size()-1; ++i)
        if(str[i] == str[i+1])
           str.erase(i, 2);
    std::cout<<str<<'\n';
    return 0;
}
Добавлено через 1 минуту
Оу. Про согласные не увидел. Тогда солидарен с asics.
xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 16:33  [ТС]     удаление пробелов между словами и буквами #4
у меня показывает 2 ошибки
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.01.2011, 16:34     удаление пробелов между словами и буквами #5
xellboy8, Ошибки в студию...
xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 16:36  [ТС]     удаление пробелов между словами и буквами #6
в программе которую прислал asics
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.01.2011, 16:37     удаление пробелов между словами и буквами #7
xellboy8, Сами ошибки сюда скиньте оО
xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 16:38  [ТС]     удаление пробелов между словами и буквами #8
------ Построение начато: проект: dmitriy, Конфигурация: Debug Win32 ------
Компиляция...
laba.cpp
c:\users\user\documents\visual studio 2008\projects\dmitriy\dmitriy\laba.cpp(10) : error C3861: getline: идентификатор не найден
c:\users\user\documents\visual studio 2008\projects\dmitriy\dmitriy\laba.cpp(16) : error C2679: бинарный '<<': не найден оператор, принимающий правый операнд типа 'std::string' (или приемлемое преобразование отсутствует)
d:\program files\microsoft visual studio 9.0\vc\include\ostream(653): может быть 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(700): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(738): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(785): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(909): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(916): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(923): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(930): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [найдено при поиске с зависимостью от аргументов]
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(170): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(176): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(183): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(190): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(210): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(243): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(263): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 int)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(288): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(308): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(328): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(349): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(369): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(390): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(410): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(430): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(450): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
d:\program files\microsoft visual studio 9.0\vc\include\ostream(470): или 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
при попытке сопоставить список аргументов '(std::ostream, std::string)'
Журнал построения был сохранен в "file://c:\Users\user\Documents\Visual Studio 2008\Projects\dmitriy\dmitriy\Debug\BuildLog.htm"
dmitriy - ошибок 2, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.01.2011, 16:51     удаление пробелов между словами и буквами #9
xellboy8, #include <string> добавьте в начале кода.
asics
02.01.2011, 16:55
  #10

Не по теме:

Мда, вроде копировал код на форум з #include <string>, хз где он делся

xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 17:00  [ТС]     удаление пробелов между словами и буквами #11
а могли бы вы расписать по шагово как работает эта программа а то учитель замонает вопросами...я ему уже раз 7 пойду сдавать это задание....последний зачет осталось получить
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
02.01.2011, 17:05     удаление пробелов между словами и буквами #12
xellboy8, Да тут вроде и шагов не так много, просто проходимся в цыкле по сторке и ищем согласную букву, если нашли то проверяем букву идущую за ней и если эта буква равняется предедущей, то удаляем эти две буквы.
xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 17:08  [ТС]     удаление пробелов между словами и буквами #13
а еще одна просьба как будет выглядеть алгоритм к этой программе
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
02.01.2011, 17:10     удаление пробелов между словами и буквами #14
xellboy8, Я же написал алгоритм.
xellboy8
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 8
02.01.2011, 18:31  [ТС]     удаление пробелов между словами и буквами #15
блок-схема, прошу прощения, как будет выглядеть

Добавлено через 1 час 19 минут
я когда в этой программе ввожу к примеру ffddog у меня выводит ddog то есть символ dd не удаляеться
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
02.01.2011, 23:13     удаление пробелов между словами и буквами #16
Цитата Сообщение от xellboy8 Посмотреть сообщение
я когда в этой программе ввожу к примеру ffddog у меня выводит ddog то есть символ dd не удаляеться
Тогда так попробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
 
int main()
{
    std::string str;
    const std::string byk("BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvXxZz");
    std::cout << "\n\nString -> ";
    getline(std::cin, str);
 
    int k;
    for(std::string::size_type i = 0; i < str.length() - 1; ++i)
        if(byk.find(str[i]) != std::string::npos &&  str[i] == str[i + 1])
        {
            str.erase(i, 2);
            --i;
        }
 
    std::cout << str << std::endl;
    return 0;
}
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
03.01.2011, 00:19     удаление пробелов между словами и буквами #17
Давно для себя писал:
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
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
char teststroka []= "BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvXxZz";
 
bool f (char* simvol) {
 if (strchr(teststroka, *simvol))
  if (((*(simvol-1))==*simvol)||((*(simvol+1))==*simvol))
   return false;
  if (islower(*simvol))
   if (*(simvol-1)==(toupper)(*simvol)||*(simvol+1)==(toupper)(*simvol))
    return false;
  if (isupper(*simvol))
   if (*(simvol-1)==(tolower)(*simvol)||*(simvol+1)==(tolower)(*simvol))
    return false;
  return true;  
}
 
//+++++++++++++++++++++++++++++++++++++=
char* copystrok1 (char *t, char *s) {
 char* c= t;
 while (*s!= '\0') {
  if (f(s)) {
   *t++= *s++;
  }
  else {
   s++;
  }
 }
 *t= '\0';
 return c;
 getchar ();
};
 
//+++++++++++++++++++++++++++++++++++++=
int main() {
  char stroka_1 [55]= "asdf  gg jk tt  uu erb hh kj o kk kjkj  jjjj jj rerre";
  char stroka_2 [55];
  copystrok1 (stroka_2, stroka_1);
  printf ("%s\n", stroka_2);
  getchar ();
}
Тут разработана функция copystrok1, которая посимвольно копирует строку t в строку s при соблюдении некторого условия.
За соблюдение или несоблюдение условия отвечает функция f. Если она возвращает истину- происходит копирование, иначе нет. Можно использовать в других проектах, только функцию f меняй как я щас и всё.

Тестируй.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
03.01.2011, 01:58     удаление пробелов между словами и буквами #18
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//////////////////////////////////////////////////////////////////////////////////////
//Программа, которая удаляет удвоенные согласные в любом предложении.
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
void  remove_dual_consonants(T_str&  s)
{
    struct  T_is_eq_cons
    {
        T_str  consonants_;
        T_is_eq_cons() : consonants_("bcdfghklmnpqrstvwxz")
        {}
        //-----------------------------------------------------------------------------
        bool operator() (T_str::value_type  symb_A, T_str::value_type  symb_B)
        {
            return    tolower(symb_A) == tolower(symb_B)
                   && consonants_.find(tolower(symb_A)) != T_str::npos;
        }    
    };
 
    for(T_str::iterator  start_it = s.begin();;)
    {
        start_it = std::adjacent_find(start_it, s.end(), T_is_eq_cons());
        if(start_it == s.end()) break;
        s.erase(start_it, start_it + 2);         
    }
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите строку латиницей с двойными согласными:"
              << std::endl;
 
    T_str  s;
    getline(std::cin, s);
    remove_dual_consonants(s);
    std::cout << "Строка с удаленными двойными согласными:"
              << std::endl
              << s
              << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2011, 02:00     удаление пробелов между словами и буквами
Еще ссылки по теме:

Строки определение максимального количества пробелов между словами C++
Увеличить в два раза количество пробелов между словами C++
C++ Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов

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

Или воспользуйтесь поиском по форуму:
kravam
03.01.2011, 02:00     удаление пробелов между словами и буквами
  #19

Не по теме:

Кстати, чё за название у темы?

Yandex
Объявления
03.01.2011, 02:00     удаление пробелов между словами и буквами
Ответ Создать тему
Опции темы

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