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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строки из статики в динамику-проблема:(, задача на строки 
:(
    Опции темы
Ангелинка
  Дата 12.3.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте всем! 
не могли бы вы мне помочь...у меня задачка на строки: Выписать из символьной строки слова, начинающиеся и заканчивающиеся на одну и ту же букву...вот я почитала...сделала...работает замечательно...понесла преподу сдавать а он злобный такой потребовал сделать тоже самое через динамику ...ну я не могу сделать динамически ...прям хоть  smile ...а завтра нужно ему принести...может кто-нибудь может помочь...

вот что у меня статически написано :
Код

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

int main()
{
    clrscr();
    int mas[100]={0},i,k,j;
    char a[100]={0},ch;
    cout<<"Input string: ";
    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]){
            for(j=mas[i]+1;j<mas[i+1];j++)
                cout<<a[j];
                cout<<endl;}

    }

    getch();
    return 0;

}


Заранее благодарна  smile 
Ангелинка  smile 
PM MAIL   Вверх
vinter
Дата 12.3.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Код

clrscr();
    int mas[100]={0},i,k,j;
    char *a,ch;
    a = new char[100];//c++ style
//a = (char*)malloc(100) c style
for(int i = 0; i < 100; i++)
   a[i] = 0;


Добавлено @ 18:05 
в конце 
Код

delete []a;
//free(a);


Это сообщение отредактировал(а) vinter - 12.3.2007, 18:04


--------------------
Мой блог
PM MAIL WWW   Вверх
_hunter
Дата 12.3.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ну а проблема в чем? после в блоке "Input string: " читаеш строку целиком.
после блока прифигачиваеш кусок, считающий количество слов.
вместо char a[100] пишеш char* words = new char[_количество_слов_]
ранее введенную строку разбиваеш на слова и заполняеш ими этот массив.
больше ничего не меняется...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Ангелинка
Дата 12.3.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



vinter, извинете пожалуйста...я наверно что-то не так исправила...теперь просто выдается ошибка Multiple declaration for 'i'  smile ... я переправила вот так...
Код

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

int main()
{
    clrscr();
    int mas[100]={0},i,k,j;
    char *a,ch;
                a = new char[100];
                for(int i = 0; i < 100; i++)
                a[i] = 0;
                cout<<"Input string: ";
    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]){
            for(j=mas[i]+1;j<mas[i+1];j++)
                cout<<a[j];
                cout<<endl;}
                   
    }
                delete []a;
    getch();
    return 0;

}

Если это возможно подскажите пожалуйста что не так...
 smile 
PM MAIL   Вверх
vinter
Дата 12.3.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Код

 for( i = 0; i < 100; i++)



--------------------
Мой блог
PM MAIL WWW   Вверх
_hunter
Дата 12.3.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



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


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
GIK
Дата 12.3.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Сама програмка не доработана, подсчет строк происходит вместе с пробелами, два пробела с самого начала или вообще где угодно будут считатся как ключевое (целевое) слово.
Попробуйте ввести например так "  gik gig    gid     kik";
Програмка выдаст одно ключевое слово "gig" и еще несколько "пустых" слов иначе говоря пробелов.
Эту проблему решить не проблема smile 
Код

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

int main()
{
    clrscr();
    int mas[100]={0},i,k,j;
    char *a, ch;
    a = new char[100];
      for(i = 0; i < 100; i++)
        a[i] = 0;

    cout<<"Input string: ";

    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;
    getch();
    return 0;

};





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


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

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



Код

// вместе с conio ? #include <iostream.h>
#include <string.h>
#include <conio.h>


char *add_symbol(char *buf,char ch)
{
     char *newbuf=new char[strlen (buf)+2],*p=newbuf,*t=buf;
     while(*p++=*t++);// копирование старой строки
      *--p=ch;
      *++p=0;
       delete [] t;
        return p;

}

char* next_word(char *text)
{
     char *p=text;
     while(*p && *p!=' ')p++;// поиск конца слова
      if (!p) return NULL;
     while(*p && *p==' ')p++;// поиск начала слова
      if (!p) return NULL;
      else return p;
}

void les_mots(char *text)
{
     char *p=next_word(text),*c=p;
     do {
          while ( p=next_word(p+1) )
              if(p>c  && *p==*c )
                  cputs(p); // вывод слова
          p=text;
      } while (c = next_word(c ) );
     
}


int main()
{
    clrscr();
    int mas[100]={0},i,k,j;
    char *a, ch;
    a = new char[1];
    *a='\0';
    cputs("Input string: ");
    i=0;
    while( (ch=getch() )!=13 )
     {
         a=add_symbol(a,ch);
          i++;
          putch(ch);
         }
    };
    putch(13);

    les_mots(char *text);

    delete []a;
    getch();
    return 0;
};


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


Новичок



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

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



 smile Всем БОЛЬШУШЕЕ спасибо...очень помогли...сегодня здала все преподу smile ...

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

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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