Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите мне написат скрипт очень простой програмы


Автор: Jin2D 19.5.2004, 22:00
Я порсо начинающий программер и мне нужна помощь, не имею понятия как написатью
Програмулька---

принцип:
при введении предложения прога должна выбрать слово в котором наибольшее количество согласрых,
помогите мне плеасе!буду благодарен, если что кинте на мыло jin2d@delfi.lt


БЛОГОДАРЮ!

Автор: Sined 20.5.2004, 08:12
Самое трудное--перечислить согласные...Если сделаешь, то программа будет что-то тип такокого:
Код

#include<stdio.h>
#include<mem.h>
#include<iostream.h>
mas[26]={0,1,......}0--гласные, 1 cсогласные.
typedef struct _struct
{
int pos;
int s;
}str;
int enum_sogl(char* str)
{
char a=0;
int j=strlen(str);
int* index=(int*)malloc(sizeof(int)*strlen(str));
str* sum=(int*)malloc(sizeof(str)*strlen(str));
int ts;
int pos=0;
int i;
for(i=0;i<j;i++)
index[i]=0;
int max_num=0;
for( i=0;i<str)
{
if((ch[i]>'a')&&(ch[i]<'z'))
index[i]=mas[ch[i]-'a'];
else if(ch[i]=' ')
index[i]=2;
 }

for(i=0;i<j;i++)
{
if(index[i]=='2')
{
sum.s[pos]=ts;
sum.pos=pos;
ts=0;
pos++;
}
else
ts+=index[i];
}

max_num=0;
for(i=0;i<pos;i++)
(max_num>sum[i].s)?(max_num=sum[i].pos):(max_num=max_num);

free(sum);free(index);
return max_num;
}

void main()
{
char m[]="Naidi do figa soglasnich";
int i=enum_sogl(m);
int p[2];
int c=0;
int j=0;
while(c<i)
{
(m[j]=='  ')?(c++):(c=c);
j++;
}
p[0]=j;
char* need_word=(char*)malloc((p[1]-p[0]+1));
while(m[j]!='  ')
{
need_word[j-p[0]]=m[j];
j++;
}
need_word[j]=NULL;
cout<<need_word;
free(need_word);


}




типа возвращает номер искомого слова в строке

Автор: Гость_Jin2D 20.5.2004, 08:57
A ty mozes napisat s bibliotekami i tak dalee. naprimer:


#include<stdio.h> i tak dalee.


spasibo!

Автор: Sined 20.5.2004, 09:38
Смотри редакцию.

Автор: setq 20.5.2004, 10:18
Код
#include <ctype.h>

char *f (char *s) {
   //ищем в s слово с макс. количеством согласных букв
   //возвращаем указатель на слово или 0 (?)
   //если слов несколько - возвр. указатель на первое

   char *now_word = s;
   char *max_word = 0;
   int now_count = 0;
   int max_count = 0;
   bool not_a_word = true;

   for (int i=0;s [i]!='\0';i++) {

       //если пробел - "выключаем" слово
       if (isspace (s [i]) || ispunct (s [i])) {
           not_a_word = true;
           continue;
       }

       //если буква - то "включаем" слово
       if (isalpha (s [i])) {
           if (not_a_word == true) {
               now_word = &s [i];
               now_count = 0;
               not_a_word = false;
           }

           //теперь, если согласная - увеличим счётчик и сделаем проверку
           char up_si = toupper (s [i]);

           if (up_si != 'A' &&
               up_si != 'E' &&
               up_si != 'I' &&
               up_si != 'O' &&
               up_si != 'U')      {

               now_count ++;
               if (now_count > max_count) {
                   max_count = now_count;
                   max_word = now_word;
                   continue;
               }
           }
       }

   }

   return max_word;
}

#include <stdio.h>

int main () {
   printf ("%s\n", f ("Naidi dofiga soglasnyh"));
   return 0;
}

Автор: Sined 20.5.2004, 11:57
Или вот более более простая и быстрая версия.
Код


#include <condefs.h>
#include<iostream.h>
#include<mem.h>

void fun(char* ch,char* word)
{
int off_min=0,temp_min=0;
int off_max=0,temp_max=0;
int index=0;
int tmp_index=0;
for(int i=0;i<strlen(ch);i++)
{
tmp_index+=(ch[i]!='a')&&(ch[i]!='o')&&(ch[i]!='u')&&(ch[i]!='y')&&
(ch[i]!='A')&&(ch[i]!='O')&&(ch[i]!='U')&&(ch[i]!='Y')&&(ch[i]!='i')&&(ch[i]!='I')&&
(ch[i]!=' ');
if((ch[i]==' ')+(i==strlen(ch)-1))
{
temp_max=i;
if(index<tmp_index)
{
off_max=temp_max;
off_min=temp_min;
index=tmp_index;

}
tmp_index=0;
temp_min=i;
}
}
memcpy(word,ch+off_min,off_max-off_min+1);
word[off_max-off_min+1]=NULL;
}

void main()
{
char m[]="Poschittttay do figa sssssssssssssoglasnich";
char* w=(char*)malloc(strlen(m)+2);
fun(m,w);
cout<<w;
cin>>w;

Автор: Jin2D 20.5.2004, 15:00
Spasibo vsem okolo 8 chasov ja proveriu ih, poskolku ja seicas na rabote. BLAGODARIU ZARANEE!!!

smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)