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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.72
smiters
1 / 1 / 0
Регистрация: 24.11.2010
Сообщений: 24
14.11.2011, 15:07     Удалить все гласные буквы из строки #1
Здравствуйте,помогите составить программу!!!
Нужно удалить все глассные буквы из строки
используя функции:

1.Формирование,печать и обработку массивов и строк оформить в виде функции. Массивы передавать как параметры функций.
2.Ввод/вывод строк организовать с помощью функций:
char* gets(char*s)
int puts(char*s)
3.Для обработки строк использовать стандартные функции из библиотечного файла <cstring>
4.Функции main() должна содержать только описание массивов/строк и вызовы функций для формирования,печати и обработки массивов/строк...

Пожалуйста оч надо
 Комментарий модератора 
Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.11.2011, 18:42     Удалить все гласные буквы из строки #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
void str_delete_vowels(char* str) {
  size_t pos = 0u, size;
  for(size = strlen(str); (pos = strcspn(str, "aoeiyuAOEIYU")) < size; size--, str += --pos) 
      strcpy(str + pos, str + (pos + 1u));
}
 
int main(void) {
   char str[128] = { '\0' };
   printf("in str: ");
   gets(str);
   str_delete_vowels(str);
   puts(str);
   getchar();
   return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 18:49     Удалить все гласные буквы из строки #3
Вот задание на плюсах
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
#include <iostream>
#include <cstring> 
using namespace std;
 
//Ïðîâåðÿåò ÿâëÿåòñÿ ëè ñèìâîë ГЈГ«Г*Г±Г*îé
//ÂîçâðГ*ГІ 0 - åñëè ëîæü ГЁ Г*ГҐГ*óëåâîå Г§Г*Г*Г·ГҐГ*ГЁГҐ åñëè chr ГЈГ«Г*Г±Г*Г*Гї
int isvowel(char chr)
{
    char vowels[] = "aeiouy";//Ïåðå÷èñëÿåì ГўГ±ГҐ ГЈГ«Г*Г±Г*ûå
    //ГіГ§Г*Г*ВёГ¬ äëèГ*Г*Гі ñòðîêè vowels
    long i, len = sizeof(vowels)/sizeof(vowels[0]);
    if(isupper(chr))//Äëÿ óïðîùåГ*ГЁГї îïóñêГ*ГҐГ¬ chr Гў Г*ГЁГ¦Г*ГЁГ© ðåãèñòð
        chr = tolower(chr);
    for(i = 0; i < len; i++)
    {
        if(chr == vowels[i])
            break;
    }
    return len - i;
}
        
int main()
{
    char str[1024];//Ââåä¸ì ñòîêó ñèìâîëîâ 
    //ГЁ îòäåëüГ*Г® ïðîГ*Г*Г*ëèçèðóåì ГЄГ*æäûé
    printf("Enter string : ");
    cin.getline(str,1024);//Ñ÷èòГ*ëè ñòðîêó(ìîæГ*Г® Г± ïðîáåëГ*ìè)
    for(long i = 0; i < strlen(str);i++)
    {
        if(isvowel(str[i]))//Ñèìâîë ГЈГ«Г*Г±Г*Г*Гї
        {
            if(i + 1 < strlen(str))
            {
                //Åñëè ñèìâîë Г*ГҐ ïîñëåäГ*ГїГї ГЎГіГЄГўГ* ñòðîêè
                //êîïèðóåì Г*Г* ìåñòî i ñèìâîëû ïîñëå Г*ГҐГЈГ®
                strcpy(&str[i], &str[i + 1]);
                i--;//ÂîçâðГ*Г№Г*åìñÿ ГІ.ГЄ. Г*Г* i-îé ïîçèöèè óæå i + 1 ñèìâîë
            }
            else//Åñëè ñèìâîë Г*ГҐ ïîñëåäГ*ГїГї ГЎГіГЄГўГ* ñòðîêè
                str[i] = '\0';//ïðîñòî îáðåçГ*ГҐГ¬ ñòðîêó
        }
    }
    cout<<"String after removing vowels : "<<str<<endl;
    system("pause");
    return 0;
}
Миниатюры
Удалить все гласные буквы из строки  
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 21:01     Удалить все гласные буквы из строки #4
Подозреваю что вот эту строка сложна для понимания
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
strcpy(&str[i], &str[i + 1]);
Поясню на пальцах
C++
1
2
for(i; i < strlen(str) - 1; i++)
     str[i] = str[i + 1];
- вот и весь функционал

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//Если символ не последняя буква строки
* * * * * * * * * * * * * * * * //копируем на место i символы после него
Пример строка
abcde
strcpy(str[1],str[2]);преобразует её в строку acde вот и всё...

Добавлено через 5 минут
Далее как я понял непонятно это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
f(isupper(chr))//Для упрощения опускаем chr в нижний регистр
* * * * * * * * chr = tolower(chr);
Поясню чтобі не ворочать строкой гласных в нижнем и верхнем регистре как здесь
Цитата Сообщение от xAtom Посмотреть сообщение
"aoeiyuAOEIYU"
я решил сократить вдвое число опреаций, т.к. 'а' = tolower('A');
Тогда если имеем такую строку blAbLabla то после tolower применённой к каждому єлементу она преобразуется к виду blablabla и теперь можно сравнивать символы только нижнего регистра
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
"aeiouy";
экономя тем самым время выполнения...
smiters
1 / 1 / 0
Регистрация: 24.11.2010
Сообщений: 24
14.11.2011, 21:04  [ТС]     Удалить все гласные буквы из строки #5
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 <iostream>
#include <cstring> 
using namespace std;
 
//Проверяет является ли символ гласной
//Возврат 0 - если ложь и ненулевое значение если chr гласная
int isvowel(char chr)
{
        char vowels[] = "aeiouy";//Перечисляем все гласные
        //узнаём длинну строки vowels
        long i, len = sizeof(vowels)/sizeof(vowels[0]);
        if(isupper(chr))//Для упрощения опускаем chr в нижний регистр
                chr = tolower(chr);
        for(i = 0; i < len; i++)
        {
                if(chr == vowels[i])
                        break;
        }
        return len - i;
}
                
int main()
{
        char str[1024];//Введём стоку символов 
        //и отдельно проанализируем каждый
        printf("Vvedite stroky : ");
        cin.getline(str,1024);//Считали строку(можно с пробелами)
        for(long i = 0; i < strlen(str);i++)
        {
                if(isvowel(str[i]))//Символ гласная
                {
                        if(i + 1 < strlen(str))
                        {
                                //Если символ не последняя буква строки
                                //копируем на место i символы после него
                                for(i=0; i < strlen(str) - 1; i++)
                                str[i] = str[i + 1];
                                i--;//Возвращаемся т.к. на i-ой позиции уже i + 1 символ
                        }
                        else//Если символ не последняя буква строки
                                str[i] = '\0';//просто обрезаем строку
                }
        }
        cout<<"Stroka posle udal glacnix : "<<str<<endl;
        system("pause");
        return 0;
}

т.е. вот так можно записать?
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 21:06     Удалить все гласные буквы из строки #6
Цитата Сообщение от smiters Посмотреть сообщение
for(i=0;
- я не писал там i = 0!!!Я работаю с i - символом, ладно сейчас накидаю проще...
smiters
1 / 1 / 0
Регистрация: 24.11.2010
Сообщений: 24
14.11.2011, 21:08  [ТС]     Удалить все гласные буквы из строки #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- я не писал там i = 0!!!Я работаю с i - символом, ладно сейчас накидаю проще...
ок,буду оч признателен
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 21:13     Удалить все гласные буквы из строки #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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <cstring> 
using namespace std;
 
//Проверяет является ли символ гласной
//Возврат 0 - если ложь и ненулевое значение если chr гласная
int isvowel(char chr)
{
    char vowels[] = "aeiouy";//Перечисляем все гласные
    //узнаём длинну строки vowels
    long i, len = sizeof(vowels)/sizeof(vowels[0]);
    if(isupper(chr))//Для упрощения опускаем chr в нижний регистр
         chr = tolower(chr);
    for(i = 0; i < len; i++)
    {
        if(chr == vowels[i])
            break;
    }
    return len - i;
}
                
int main()
{
    char str[1024];//Введём стоку символов 
    //и отдельно проанализируем каждый
    printf("Vvedite stroky : ");
    cin.getline(str,1024);//Считали строку(можно с пробелами)
    for(long i = 0,j; i < strlen(str);i++)
    {
        if(isvowel(str[i]))//Символ гласная
        {
            if(i + 1 < strlen(str))
            {
                //Если символ не последняя буква строки
                //копируем на место i символы после него
                 for(j = i; j < strlen(str) - 1; j++)
                     str[j] = str[j + 1];
                 str[j] = '\0';//Т.к. это не strcpy а из строки выкинули 1 символ, 
                 //то и уменьшим на символ саму строку
                 i--;//Возвращаемся т.к. на i-ой позиции уже i + 1 символ
            }
            else//Если символ не последняя буква строки
                str[i] = '\0';//просто обрезаем строку
        }
    }
    cout<<"Stroka posle udal glacnix : "<<str<<endl;
    system("pause");//Просто приостанавливаем алгоритм до того момента пока не нажмём любую кнопку
    return 0;
}
Миниатюры
Удалить все гласные буквы из строки  
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 21:21     Удалить все гласные буквы из строки #9
PS:Для руссификации совсем необязательно юзать CharToOem, можно перегрузить оператор вывода
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
#include <iostream>
using namespace std;
 
//Руссификация
ostream& operator<<(ostream &stream,char* s)
{
        for(char* ps=s; *ps; ps++)
        {
                if(*ps=='ё')
                        stream<<char(241);
        else 
                if(*ps=='Ё')
                        stream<<char(240);
        else 
                if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else 
                if(*ps<0)
                        stream<<char(*ps+64+176);
        else
                        stream<<*ps;
        }
    return stream;
}
 
int main()
{
       cout<<"Да вот так просто русский сделать\n";
       system("pause");
       return 0;
}
Neon_325
0 / 0 / 0
Регистрация: 25.02.2012
Сообщений: 11
03.04.2012, 20:28     Удалить все гласные буквы из строки #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS:Для руссификации совсем необязательно юзать CharToOem, можно перегрузить оператор вывода
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
#include <iostream>
using namespace std;
 
//Руссификация
ostream& operator<<(ostream &stream,char* s)
{
        for(char* ps=s; *ps; ps++)
        {
                if(*ps=='ё')
                        stream<<char(241);
        else 
                if(*ps=='Ё')
                        stream<<char(240);
        else 
                if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else 
                if(*ps<0)
                        stream<<char(*ps+64+176);
        else
                        stream<<*ps;
        }
    return stream;
}
 
int main()
{
       cout<<"Да вот так просто русский сделать\n";
       system("pause");
       return 0;
}
А вы мне не подскажите пожалуйста,как написать аналогичный код только чтобы из строки удалять не гласные буквы, а слова начинающиеся на гласную букву, тоже через параметры...
Anni-Val
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 4
07.05.2012, 07:38     Удалить все гласные буквы из строки #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS:Для руссификации совсем необязательно юзать CharToOem, можно перегрузить оператор вывода
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
#include <iostream>
using namespace std;
 
//Руссификация
ostream& operator<<(ostream &stream,char* s)
{
        for(char* ps=s; *ps; ps++)
        {
                if(*ps=='ё')
                        stream<<char(241);
        else 
                if(*ps=='Ё')
                        stream<<char(240);
        else 
                if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else 
                if(*ps<0)
                        stream<<char(*ps+64+176);
        else
                        stream<<*ps;
        }
    return stream;
}
 
int main()
{
       cout<<"Да вот так просто русский сделать\n";
       system("pause");
       return 0;
}
Спасибо за помощь, но увы Visual не хавает(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 07:46     Удалить все гласные буквы из строки
Еще ссылки по теме:

Удалить все гласные буквы из строки C++
Удалить все гласные буквы из строки, используя функции C++
Убрать все гласные буквы со строки C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
07.05.2012, 07:46     Удалить все гласные буквы из строки #12
Цитата Сообщение от Anni-Val Посмотреть сообщение
Спасибо за помощь, но увы Visual не хавает(
Версия компилятора?Я так думаю что 2008-ая?Тогда код нужно немножко поправить либо настраивать шрифт приложения, т.к. он писан в 6-й версии...


К примеру шрифт приложния выставляется в 3-ри щелчка мыши
ссылка

Добавлено через 4 минуты
Что же касается правки кода - тогда вот
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <clocale>  //setlocale
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");//ГђГіГ±Г±ГЁГґГЁГЄГ*öèÿ
    cout<<"Г„Г* âîò ГІГ*ГЄ ïðîñòî ðóññêèé ñäåëГ*ГІГј\n";
    system("pause");
    return 0;
}
http://codepad.org/CR8n6l0O
Yandex
Объявления
07.05.2012, 07:46     Удалить все гласные буквы из строки
Ответ Создать тему
Опции темы

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