Помогите с программой

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Рушан
Сообщения: 1
Зарегистрирован: 17 дек 2017, 11:31

17 дек 2017, 11:37

Я недавно начал изучать массивы и не могу написать эту программу
Дана строка символов. Признак конца строки – символ '\n' (пеpевод стpоки). Стpока состоит из слов, pазделенных пpобелами. Вывести
слова, заканчивающиеся слогом 'ва', и длину каждого из этих слов
я тут накидал но это ...

Код: Выделить всё

#include <iostream>
#include <stdio.h>
#include <conio.h>
#define DLSTR 80
using namespace std;

int main()
{
    char str[DLSTR];
    int i=0, j=0;
    int n, k, a, b;
    int error;
    setlocale(LC_ALL"Russian");
    cout <<("\n\nВведите строку символов\n");
    gets(str);
    cout <<("Результат\n");
    while (str[i]!='\0')
         {
             if (str[i]==' ')  i++;
             else
             {
                 a=i;
                  do  i++;
                  while ((str[i]!='  ') && (str[i]!='\0'));
                  {
                     b=i;
                  }


              while ((str[i+2]!=' ')&&(str[i+2]!='\0'))
                {
                    n=i;
                    i++;
                }

                    i=0;
                while ((str[i+1]!=' ')&&(str[i+1]!='\0'))
                {
                    k=i;
                    i++;
                }
                if ((str[k]=='а')&&( str[n]=='в'))
                  {for (j=a; j<b; j++)
                           putchar(str[j]);
                       putchar('  ');
                       error=0;
                  }

             }
             return 0;

    }
}
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

17 дек 2017, 16:35

Напиши описание алгоритма вкратце и теги кода неплохо-бы поставить. А зачем первое слово-то пропустил? Ну код бредовый конечно, его весь надо перерабатывать: в этой строке

Код: Выделить всё

if ((str[k]=='а')&&( str[n]=='в'))
str[k] и str[n] - вообще получились из разных слов. Поэтому программа полностью косячная и работать не будет. Не обижайся, чувак. Такая вот горькая правда. :D Здесь нужно взять за основу алгоритм поиска буквы, которая стоит за 3 буквы до пробела или конца строки. Потом нужно сравнить 2 следующие буквы с "ва" - по одной букве, естественно. Предварительно нужно в слове посчитать буквы в слове, если слово окажется нужным, то вывести этот результат(Counter). Ну и так дальше по каждому слову.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

18 дек 2017, 11:08

Вот я код написал: :D

Код: Выделить всё

//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#include <conio>
#include <stdio>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#define DLSTR 80
using namespace std;

int main(int argc, char* argv[])
{
char str[DLSTR];
int i = 0, j = 0, n, a,
    error, Counter = 0, CounterN = 0;
    
setlocale(LC_ALL, "Russian");
cout << "Vvedite stroku simvolov:\n";
gets(str);
cout << "Result:\n";
i = 0;
while(str[i] != 0)  //poka ne konchilas stroka
{
    if(i > 0)
        i++;

    a = i;  //nachalo slova
    Counter = 0;
    while((str[i+2]!=' ')&&(str[i+2]!='\0'))//poluchit slovo
    {
        Counter++;
        n = i;
        i++;
    }
    //n - za 2 bukvi do konca slova
    Counter += 2;  //+2 bukvi = dlina slova

    if((str[n+1]=='v')&&(str[n+2]=='a'))
    {
        CounterN++;
        cout << CounterN << " slovo: ";
        for(j=a; j<(n+3); j++)
            putchar(str[j]);
        cout << "; Kolichestvo bukv: " << Counter << ";\n";
        error=0;
    }
    i += 2;
}

getch();
return 0;
}
//---------------------------------------------------------------------------
C++Builder 6. Только тут для латинских v и a, потому что у меня компьютер не поддерживает русские буквы в C++Builder 6. Надеюсь ума хватит заменить латинские на русские. :D Не в обиду. :D Иииии, жду спасибо. :D
Ответить