Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c++] строки 
V
    Опции темы
fenwer
Дата 19.11.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



Подскажите пожалуйста как вывести слова не содержащие гласных букв в исходной строке( исходную строку забиваешь сам, причем специально пару слов без гласных букв  smile )
PM MAIL ICQ   Вверх
GIK
Дата 19.11.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



По кодам в двоичном виде, перебирая варианты, легко smile Если ни кто не напишет сделаю, времени сейчас нет smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 19.11.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Когдато написал smile 
Цитата
Напечатать все слова, которые не содержат гласных букв.
Код

#include <cstdio>
#include <cstring>

int main(int argc, char *argv[])

    const int size = 255;
    char *clas = "qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM\
цкнгшщзхфвпрлджчсмтбЦКНГШЩЗХФВПРЛДЖЧСМТБ";
    char str[size],
        *c = str, 
        *ch = NULL;
    gets( str );
    puts("\n");
    char *end = str + strlen( str );

    while( c < end ){
        c = strtok( c, " " );
        ch = strpbrk( c, clas );
        if ( ch == NULL ) printf("%s ", c );
        c += strlen( c ) +1;
    }
    getchar();
    return 0;

}

PM MAIL   Вверх
fenwer
Дата 19.11.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



а почему он наоброт выводит слова с ласными, а не с согласными? smile
PM MAIL ICQ   Вверх
Dov
Дата 19.11.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(fenwer @  19.11.2007,  19:56 Найти цитируемый пост)
а почему он наоброт выводит слова с ласными, а не с согласными? 

А потому, что он не согласный, что ты задаёшь такие вопросы после того, как тебе выложили готовый код.  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
fenwer
Дата 20.11.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



Цитата(Dov @ 19.11.2007,  23:00)
Цитата(fenwer @  19.11.2007,  19:56 Найти цитируемый пост)
а почему он наоброт выводит слова с ласными, а не с согласными? 

А потому, что он не согласный, что ты задаёшь такие вопросы после того, как тебе выложили готовый код.  smile

А когда мне задавать вопросы ?! и вобще почему то не работает  smile 

Если может кто напишите еще вариантик smile
PM MAIL ICQ   Вверх
GIK
Дата 20.11.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Цитата

Если может кто напишите еще вариантик

Код

#include <string>
#include <iostream>

#include<stdio>
#include<conio>


int main()
{ int i=0,j=0, g=0;
  int p=0; //Счетчик кол-ва пробельных символов

  //Если предложение выглядело так, то вместо 0, использовалось бы 32!!!
  char str[24]={'g','i','k', ' ', 's','a','n',' ','g','a','d',' ','s','a','n','k','u',' ','m','a','n','e','r',' '};
  int probel[5]={0}; //Индексы пробелов из массива сиволов
               //цифровые эквиаленты гласных букв
  //char *soglasnie = "qwrtpsdfghklzxcvbnm QWRTPSDFGHKLZXCVBNM цкнгшщзхфвпрлджчсмтб ЦКНГШЩЗХФВПРЛДЖЧСМТБ"; //78 согласных символов
  char *glasnie = "aeiouyAEIOUYаийоуяюеэыАИЙОУЯЮЕЭЫ"; //32 гласных символов
  

  for(i=0; i<24; i++)
    std::cout<<str[i]<<"_";
  std::cout<<"\n";

   //Поиск пробелов 32 - числовой эквивалент пробелу в массиве символов, которые выдает большинство из компилеров
   for(i=1; i<24; i++)
   {
     if(str[i]==32)
      {
       probel[p]=i; //фиксируем в массиве индекс пробела
       p++;
       std::cout<<probel[p-1]<<"\n";
      }
   }


    //Вывод слов
   //Если первый и последний символ не есть пробел!!! if()*/
    int kk=0; bool eysss=true;
   for(i=0; i<p; i++) //кол-во слов
   {
     for(j=kk; j<probel[i]; j++)
     {
     //Проверка на гласные (фиксируем букву из слова и проверяем)
      for(g=0; g<32; g++)
        if(str[j]==*glasnie[g])
          eysss=false;
      if(eysss) //Нашли слово с гласной буквой
        {
          for(j=kk; j<probel[i]; j++)
            std::cout<<str[j];
        }
     }
     eysss=true;
     kk=probel[i]+1; //Начало следующего слова, знаю не красиво...
     std::cout<<"\n";
   }

  getch();
}

нЕ тестил, проверте.

Вобщем смотри, привел тебе массив из слов, чтобы понятнее было, если что можешь переделать на ввод из консоли.

ЗЫ: Дома написал прототип, но не знал какие гласные и согласные буквы, щас переделал, компилера нет под рукой.

Добавлено через 44 секунды
Если вводить из консоли, то числовой эквивалент пробельному символу будет = 0


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
fenwer
Дата 20.11.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



Извини , но что он выводит? smile 
gik_san_gad и т д
3
7
11
17
23
и потом каждое слово из массива отдельно на строке.
Скажи,а что это такое? 

PM MAIL ICQ   Вверх
GIK
Дата 20.11.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Цитата

и потом каждое слово из массива отдельно на строке.
Скажи,а что это такое? 

Что, действительно каждое слово? smile  smile 

Вобщем я тебе распишу логику, а ты уж сам как надо сделай.
Внимание: 
  char str[24]={'g','i','k', ' ', 's','a','n',' ','g','a','d',' ','s','a','n','k','u',' ','m','a','n','e','r',' '}; - типа вводимая строка.
 int probel[5]={0}; //В этом массиве хранятся индексы пробелов, они используется для "отрезания" слова
char *glasnie = "aeiouyAEIOUYаийоуяюеэыАИЙОУЯЮЕЭЫ"; //32 гласных символов
 
 Поиск пробелов 32 - числовой эквивалент пробелу в массиве символов. Если находим символ пробела, фиксируем индекс в массиве, индекс используется для "взятие" слова.  
   for(i=1; i<24; i++)
   {
     if(str[i]==32)
      {
       probel[p]=i; //фиксируем в массиве индекс пробела
       p++;
       std::cout<<probel[p-1]<<"\n"; //Вывод индексов
      }
   }


  
Тут происходит основное. переменная kk- индекс начала слова, probel[i] - индекс конца слова (онже пробел, который зафиксирован в массиве), и вот этот отрезок (начало слова до конца (пробела)) проверяется на существование гласных букв (ты говоришь что выводятся все слова, но на самом деле должны те котрые не имеют гласных букв). Если в этом отрезке (слове) находим гласную букву if(str[j]==*glasnie[g]), то слово не выводим. Все просто и самое главное ЛОГИЧНО, пойми один раз, и поймешь навсегда!!! 

   for(i=0; i<p; i++) //кол-во слов
   {
     for(j=kk; j<probel[i]; j++)
     {
       for(g=0; g<32; g++)
        if(str[j]==*glasnie[g])
          eysss=false;
      if(eysss) //Нашли слово с гласной буквой
        {
          for(j=kk; j<probel[i]; j++)
            std::cout<<str[j];
        }
     }
     eysss=true;
     kk=probel[i]+1; // kk - начало следующего слова, после пробела.
     std::cout<<"\n";
   }

 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
fenwer
  Дата 20.11.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



его строчка if(str[j]==*glasnie[g]) не устраивает пишет что glasnie[g] не используется нигде smile 
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 20.11.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(fenwer @  19.11.2007,  23:56 Найти цитируемый пост)
 почему он наоброт выводит слова с ласными, а не с согласными? 

ну тогда так исправь:
Код

//if ( ch == NULL ) printf("%s ", c );
if ( ch != NULL ) printf("%s ", c ); // <<< Вот так

PM MAIL   Вверх
fenwer
Дата 20.11.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



Цитата(Oleg_Ci @ 20.11.2007,  19:07)
Цитата(fenwer @  19.11.2007,  23:56 Найти цитируемый пост)
 почему он наоброт выводит слова с ласными, а не с согласными? 

ну тогда так исправь:
Код

//if ( ch == NULL ) printf("%s ", c );
if ( ch != NULL ) printf("%s ", c ); // <<< Вот так

а сейчас вобще все выводит   smile 
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 20.11.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



третий пример smile 
Код

#include <iostream>
#include <string>

using namespace std;

int main(){    
    string str;
    char glas[] = "qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM\
цкнгшщзхфвпрлджчсмтбЦКНГШЩЗХФВПРЛДЖЧСМТБ";

    cout << "Enter string:\n";
    getline( cin, str );
    string::size_type pos, beg=0, end;

    while((end=str.find_first_of(" \t", beg)) != string::npos ){
        if((pos=str.find_first_of( glas, beg )) == string::npos || pos > end )
            cout << str.substr( beg, end-beg ) << "\n";
        beg = end+1;
    }

    cin.sync();
    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
fenwer
Дата 20.11.2007, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 11.11.2007
Где: Россия. Москва

Репутация: нет
Всего: нет



я тебя наверно уже достал smile но теперь она не выводит ни гласные ни согласные .
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 20.11.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(fenwer @  20.11.2007,  22:40 Найти цитируемый пост)
а сейчас вобще все выводит

У меня нормально работает
Код

#include <cstdio>
#include <cstring>

int main(int argc, char *argv[])

    const int size = 255;
    char *clas = "qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM\
цкнгшщзхфвпрлджчсмтбЦКНГШЩЗХФВПРЛДЖЧСМТБ";
    char str[size],
        *c = str, 
        *ch = NULL;
    gets( str );
    puts("\n");
    char *end = str + strlen( str );

    while( c < end ){
        c = strtok( c, " " );
        ch = strpbrk( c, clas );
        if ( ch != NULL ) printf("%s ", c ); // <<<<<<
        c += strlen( c ) +1;
    }
    getchar();
    return 0;


}


ещё накалякал, может так правильно будет smile 
Код

#include <iostream>
#include <string>

using namespace std;

int main(){
    
    string str;
    char glas[] = "qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM\
цкнгшщзхфвпрлджчсмтбЦКНГШЩЗХФВПРЛДЖЧСМТБ";

    cout << "Enter string:\n";
    getline( cin, str );
    string::size_type pos, beg=0, end;

    
    while(1){
        end = str.find_first_of(" \t", beg);
        if( (pos=str.find_first_of( glas, beg )) == string::npos ) break;
        else if( pos < end ) cout << str.substr( beg, end-beg ) << "\n";
        beg = str.find_first_not_of(" \t", end);
    }

    cin.sync();
    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.