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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Динамические строки, три задачи в одной программе... 
:(
    Опции темы
Ангелинка
  Дата 14.3.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

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



Здравствуйте всем  smile 
У меня такая случилась беда...решила три задачи отдельно...все работало правильно...а мне надо их в одну программу засунуть, чтобы был еще switch/case...вот я объединила и полезли ошибки :
1. 106: function should return a value
2. 126: function 'gets' should have a prototype
3. 127: illegal structure operation
4. 136: function 'gets' should have a prototype
5. 150: function 'getchar' should have a prototype
Задачи у меня такие:
1. Заменить все вхождения подстроки Str1 на подстроку Str2, которые вводятся с клавиатуры.
2. Дана строка символов, среди которых есть двоеточие (smile. Определить, сколько символов ему предшествует.
3. Выписать из символьной строки слова, начинающиеся и заканчивающиеся на одну и ту же букву.
а код вот такой...
Код

#include<iostream.h>
#include <string.h>
#include <conio.h>
void zadacha_1(char mas[], char mas1[], char mas2[])
{
  int i,j,k,l;
  char c;
       do
           {
        c=getch();
        if(c!=13)
           {
           cout<<c;
           mas[i]=c;
           i++;
           }
           }
       while(c!=13);
       mas[i] = '\0';
       char mas_prov[100]={0};
       for(i=0;i<strlen(mas);i++)
           {
        if(mas[i]==mas1[0])
        {
              for(j=0;j<strlen(mas1);j++)
              mas_prov[j]=mas[i+j];
              if(strcmp(mas1,mas_prov)==0)
          {
               for(k=0;k<strlen(mas1);k++)
               mas[i+k]=48;
               if(strlen(mas1) < strlen(mas2))
                 {
              for(k=0; k<strlen(mas2)-strlen(mas1); k++)
              for(l=strlen(mas);l>i;l--)
              mas[l+1]=mas[l];
              for(k=0;k<strlen(mas2);k++)
              mas[i+k]=mas2[k];
                 }
              else
                  {
                  for(k=0;k<strlen(mas2);k++)
                  mas[i+k]=mas2[k];
                  for (k=i;k<strlen(mas);k++)
                  if (mas[k]==48)
                    {
                 for (l=k; l<strlen(mas); l++)
                 mas[l]=mas[l+1];
                 mas[strlen(mas)]=0;
                     }
                }
        }
    }
   }
}
int zadacha_2(char mas[])
{
  int i;
  for(i=0;i<strlen(mas);i++)
  if(mas[i]==':')
  break;
  return i;
}
int zadacha_3(char a[])
{
  int mas[100]={0},i,k,j;
  char ch;
  for(i = 0; i < 100; i++)
  a[i] = 0;
  i=0;
    do
     {
    ch=getch();
    if(ch!=13)
     {
      a[i]=ch;
      i++;
      cout<<ch;
     }

     }
 while(ch!=13);
 cout<<endl;
 mas[0]=-1;
 k=1;
 for(i=0;i<strlen(a);i++)
 if(a[i]==32)
   {
      mas[k]=i;
      k++;
   }
 mas[k]=strlen(a);
 for(i=0;i<k;i++)
     {
      if(a[mas[i]+1]==a[mas[i+1]-1])
         {
         if(a[mas[i]+1]!=32){
         for(j=mas[i]+1;j<mas[i+1];j++)cout<<a[j];
         cout<<endl;
         }
     }

  }

    delete []a;

}
int main()
{
 clrscr();
 int k;
 cout<<"‚ўҐ¤ЁвҐ ­®¬Ґа ўлЇ®«­пҐ¬®© Їа®Ја ¬¬л  ";
 cin>>k;
 switch (k)
   {
case 1:
         {
          cout<<"‚ўҐ¤ЁвҐ бва®Єг\n";
          char *mas, *mas1, *mas2;
                  mas=new char[100];
                  mas1=new char[100];
                  mas2=new char[100];
                  cout<<"\n‚ўҐ¤ЁвҐ бва®Єг Str1: ";
                  cin.getline(mas1,250);
                  cout<<"‚ўҐ¤ЁвҐ бва®Єг Str2: ";
                  cin.getline(mas2,250);
          gets(mas);
          cout<<"?§¬Ґ­Ґ­­ п бва®Є \n"<<zadacha_1(mas, mas1, mas2);
          break;
          }
case 2:
     {
     cout<<"‚ўҐ¤ЁвҐ бва®Єг\n";
     char *mas;
     mas=new char [150];
         cin.getline(mas,250);
     gets(mas);
     cout<<"Љ®«ЁзҐбвў® бЁ¬ў®«®  ЇаҐ¤иҐбвўгойЁе ¤ў®Ґв®зЁо    "<<zadacha_2(mas);
     break;
     }
case 3:
     {
                   cout<<"‚ўҐ¤ЁвҐ бва®Єг\n";
                   char *a;
       a=new char [150];
       cout<<"‘«®ў  бва®ЄЁ ­ зЁ­ ойЁҐбп Ё § Є ­зЁў ойЁҐбп ­  ®¤­г Ё вг ¦ҐЎгЄўг\n"<<zadacha_3(a);
       break;
     }
default: (cout<<"ЌҐ¤®ЇгбвЁ¬л© ­®¬Ґа ");
};
getchar();
return 0;
}

Может кто-нибудь сможет помочь в исправлении ошибок...

Заранее очень всем благодарна... smile 

Ангелинка  smile ...
PM MAIL   Вверх
ama_kid
Дата 14.3.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Я не стал особо разбираться с логикой программы, ибо с такой кодировкой а-ля кракозябры очень муторно, но для того, чтобы убрались ошибки, надо сделать следующее:
1) После #include <conio.h> добавить строку #include <stdio.h>
2) В строку 105 (в приведенном коде твоего поста) вставить хотя бы return 0; ибо в объявлении у тебя указано, что функция возвращает значение int. Или в объявлении функции замени возвращаемое значение на void.
3) Строку 127 преобразовать в вид:
Код

zadacha_1(mas, mas1, mas2);
cout<<"?§¬ҐҐ п бва®Є \n"<<mas;

После этого все должно скомпилироваться...
Удачи...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
apook
Дата 14.3.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

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



Код

#include<iostream.h>
#include <string.h>
#include <conio.h>


#define FIRST 0
#define AFTER 1


int *fysplis( char *str1, char *str2 )
{
const int len1=strlen(str1), len2=strlen(str2);
int i=0, j=0, wi=0, ex=0, r=-1;
int *y=new int[ 2 ];

y[ FIRST ]=-1;
y[ AFTER ]=-1;

if( len1>=len2 )
{
    for( i=0; i<len1; ++i )
    {
        wi =i;
        while( j<len2 )
        {
            if( str1[ wi ]==str2[ j ] )
            {
                if( r <0 ) r=wi;

                wi++;
                if( j==(len2 -1) )
                {
                    ex=1;
                    break;
                    }
                j++;
                }
           else
           {
               r=-1;
               j=0;  
               break; 
                }
            }
         if( ex==1 ) break;
         }
    y[ FIRST ]=r;
    y[ AFTER ]=wi;
    }
return y; // Возвращает первое и последнее вхождение
}



void zadacha_1( char *mas1, char *mas2, char *mas3 )
{
int i, j, k, l;
char c;

int *L=new int[ 2 ];

for( ;; )
{
    L=fysplis( mas1, mas2 );
    if( L[ FIRST ]==-1 || L[ AFTER ]==-1 ) break;

    for( i=0, j=0; i<strlen(mas1); ++i )
    {
        if( i>=L[ FIRST ] && i<L[ AFTER ] )
        {
            mas1[ i ]=mas3[ j ];
            ++j; 
            } 
        }
    }
return;
}



int main()
{
clrscr();
int k;
cout << "Введите омер выполяемой программы ";
cin >> k;
switch( k )
{
    case 1:
    {
        char *mas1=new char[ 100 ];
        char *mas2=new char[ 100 ];
        char *mas3=new char[ 100 ];

        cin.ignore();
        cout << "\nВведите строку Str1: ";
        cin.getline( mas1, 100 );

        cout << "Введите что менять: ";
        cin.getline( mas2, 100 );

        cout << "Введите на что менять ( " << strlen(mas2) << " символа ): ";
        cin.getline( mas3, 100 );

        zadacha_1( mas1, mas2, mas3 );

        cout << "Измееяяе строк " << mas1 << endl;
getch();

        break;
        }

case 2:
     {
     //  :)
     break;
     }

case 3:
     {
     //  :)
     break;
     }

default:
    cout << "Недопустимый номер ";
    break;
    };

getch();

return 0;
}



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Ангелинка
Дата 14.3.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

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



ama_kid, списибо тебе БОЛЬШУШЕЕ... smile просто ОГРОМНОЕ... smile все компилируется... smile ....вот только там с первой задачей теперь не знаю что делать....там неправильно ответ выводится...я наверняка что-то там напортачила с этой перепиской в одну программу... smile ....ведь в отдельности все замечательно работало...а сейчас я там что-то страшное натворила и ответ вообще не выводится...пишется только чтобы все ввели....причем скопом...а потом выводится Str 1... smile ...ты не могбы посмотреть что там не так?....

 smile ...

Добавлено @ 17:19 
apook,  smile Вы написали такое сложное решение smile ...ну для меня сложное...я в нем мало что поняла....но работает оно не правильно...вернее правильно только если длина того что меняют совпадает с длиной того на что меняют...а там в условии такого не сказано....там то на что меняют может быть и меньше и больше того что заменяют  smile ...
PM MAIL   Вверх
Ангелинка
Дата 14.3.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

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



 smile ...может всетаки можно что-то исправить в моем чтобы опять нормально заработало...

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

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


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

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

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

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


 




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


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

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