1

Тема: Розрахункова. Синтаксичний аналіз тексту*

Я не програмер, але в мене є такий предмет як програмування і з нього є розрахункова. Хто небудь допоможіть!
Задана не порожня послідовність не порожніх слів із латинських букв; сусідні слова відділяються
одне від другого комами, а за останнім словом є крапка. Визначити слова, які закінчуються5 буквою w.

Re: Розрахункова. Синтаксичний аналіз тексту*

Eldar написав:

Задана не порожня послідовність не порожніх слів.

Не порожніж слів ? Ви нічого не путаєте ?

3

Re: Розрахункова. Синтаксичний аналіз тексту*

Не порожніж слів ? Ви нічого не путаєте ?

Ні. Це точно. Я думаю, що це повинно бути просто звичайне слово.

4

Re: Розрахункова. Синтаксичний аналіз тексту*

Ось мої напрацювання. Тільки повинно рахувати слова, які закінчуються на w, а рахує ті, які починаються. Допоможіть плз.

#include <stdio.h>

int main()
{
    int size,i=0;
    char arr[]="yyutio,jfgb,while,ndkg,dfg.";
    size=sizeof(arr)/sizeof(char);
    
    if (arr[0]=='w')
    {
        for(i=0;arr[i]!=',';i++)
            printf("%c", arr[i]);
        printf("\n");
    }

    for(i=0;arr[i]!='.';i++)
    {
        if (arr[i]==',')
        {
            if (arr[i+1]=='w')
            {
                for(i=i+1;arr[i]!=',';i++)
                    printf("%c", arr[i]);
            }
        }
    }
return 0;
}

5

Re: Розрахункова. Синтаксичний аналіз тексту*

Eldar, варто зазирнути сюди.

I belong to the Dead Generation.

6

Re: Розрахункова. Синтаксичний аналіз тексту*

Bartash, не виходить(

Re: Розрахункова. Синтаксичний аналіз тексту*

Як на мене, достатньо просто замінити

if (arr[i+1]=='w')

на

if (arr[i-1]=='w')
Подякували: Eldar1

Re: Розрахункова. Синтаксичний аналіз тексту*

Ой, недогледів, ще треба цикл поправити.
Зараз виправлю.

Re: Розрахункова. Синтаксичний аналіз тексту*

Останній for заміняємо на:

for(i=i-1;arr[i]!=',';i--)
printf("%c", arr[i]);

P.S: по ідеї має працювати.

Подякували: Eldar1

10

Re: Розрахункова. Синтаксичний аналіз тексту*

Я вже сам зробив:

#include <stdio.h>
 
int main()
{
    int size,i=0;
    char arr[]="crow, snow, mail, slow, crack.";
    size=sizeof(arr);
    
    if (arr[0]!='w')
    {
        for(i=0;arr[i]!=',';i++)
            printf("%c", arr[i]);
        printf("\n");
    }
 
    for(i=0;arr[i]!='.';i++)
    {
        if (arr[i]==',')
        {
            if (arr[i+1]!='w')
            {
                for(i=i+1;arr[i]!=',';i++)
              printf("%c", arr[i]);
            }        
            printf("\n");
        }

    }
return 0;
}

11

Re: Розрахункова. Синтаксичний аналіз тексту*

Більш правильна:

#include <stdio.h>
 
int main()
{
    int size,i=0;
    char arr[]="crow,snow,mail,wslow,crack,wwwww,viyfvgjk.";
    size=sizeof(arr);
    
    if (arr[0]!='w')
    {
        for(i=0;arr[i]!=',';i++)
            printf("%c", arr[i]);
        printf("\n");
    }
 
    for(i=0;arr[i]!='.';i++)
    {
        if (arr[i]==',')
        {
            if (arr[i+1]!='w')
            {
                for(i=i+1;arr[i]!=',';i++)
              printf("%c", arr[i]);
            }        
            printf("\n");
        }
            if (arr[i]==',')
        {
            if (arr[i+1]=='w')
            {
                for(i=i+1;arr[i]!=',';i++)
              printf("%c", arr[i]);
            }
            printf("\n");
        }

    }
return 0;
}

12

Re: Розрахункова. Синтаксичний аналіз тексту*

Eldar, є кілька небезпечних місць, пов'язаних із виходом за межі масиву.
Альтернатива нижче.

#include <stdio.h>
 
int main()
{
   
     char* arr = "Low,slow,howl,grow,nice,how.";

     char *start = arr;
     while(arr)
     {
          if( *arr == ',' ||  *arr == '.')
          {
               if( *(arr-1) == 'w')
               {
                  for(;start != arr; printf("%c", *start), start++);

                  printf("\n");
               }
               if(*arr =='.') break;
               start = arr+1;
          }
          arr++;
     }


return 0;
}
I belong to the Dead Generation.

13

Re: Розрахункова. Синтаксичний аналіз тексту*

#include <stdio.h>
#define MAX 1024

int getline(char arr[]);

int main(int argc, char *argv[]){
    int c, i, j, k, l;
    char row[MAX], word[MAX];
    word[0] = ':';
    word[1] = ')';
    word[2] = '\0';
    j = k = l = 0;
    while((i = getline(row)) > 0){
        while(i >= 0){
        if((row[i] == 'W' || row[i] == 'w') && (row[i+1] == ',' || row[i+1] == '.')){
            if(k != 0){
                l = k+1;
            } else {
                l = k;
            }
            for(j = i; row[j]!=',' && j >= 0; j--){
                k++;
            }
            while(l <= k){
                j++;
                word[l] = row[j];
                l++;
            }
            word[k] = ',';
        }
            i--;
        }
        putchar('\n');
        word[k] = '\0';
        printf("%s\n", row);
        printf("%s\n", word);
    }


    return 0;
}

int getline(char row[]){
    int c, i;
    for(i = 0; i < MAX-1 && (c = getchar()) != '\n' && c != EOF; i++){
        row[i] = c;
    }
    row[i] = '\0';
    return i;
}
Білий Лунь
Подякували: Eldar1

14

Re: Розрахункова. Синтаксичний аналіз тексту*

ще таке питання....
завдання аналогічне, тільки замість перевірки останньої букви потрібно перевірити чи є в слові хоч одна буква w...
що порадите?

15

Re: Розрахункова. Синтаксичний аналіз тексту*

Перевірка на NULL результату функції strstr() , де буква "w" буде рядком, що шукається.

I belong to the Dead Generation.