Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 22:14   #1
Gromoshtannik
Новичок
Джуниор
 
Регистрация: 30.01.2012
Сообщений: 4
По умолчанию Вывод строки содержащей только слова нечетной длины (Си)

Вобщем, застопорился на одной проблеме..все работает кроме одной функции -самого задания)

text - уже введеный текст, kolstrok колличесво строк в нем

Код:
char** proverka(char** text, int kolstrok)
{
      int i;                               
      int j;                             
      int t=0;                            
      int g=0;                            
      int y;                          
      int z=1;                           
      int q;                           
      char** newtext = NULL;             
      char a[81];                                   
      char** s;
      
     s = (char **) malloc(81*sizeof(char*));
     for (i=0; i<81; i++)
     {                                                              // Выделяем память для S
         s[i]= (char *) malloc(strlen(*(s+q))*sizeof(char));  
     }    


             for(i = 0; i < kolstrok; i ++)
            {
              for(j = 0; j < strlen(*(text+i)); j ++)
             {

             a[j+1]='\0';//Присваимаем j+1-му символу символ конца строки
             a[j] = *(*(text+i)+j); 
 
             if (a[j]!=' ' || '!')//...и еще куча символов)
                 {
                  *(*(s+t)+g)=a[j];
                  g++;  //к следующему элементу сроки   
                 }                     
             else
                 {
                  *(*(s+t)+g)=a[j];                    
                  t++;  //к следующей строчки                
                 }  
               }
               
              for (y=0; z!=1; y<80; y++) //z - 
                 {
                      if ( *(*(s+y))!=' '|| '!')//
                       {
                                   if (strlen(*(s+m))%2!=0
                                    {
                                                          
                                                           q++;// + к количеству строк
                                    }     
    
                                    else
                                    {
                                         z=1;
                                    }      
                       }   
                  } 
                  

              newtext = (char **) realloc(newtext,(q+1)*sizeof(char*));
              newtext[q] = (char *) malloc(strlen(*(s+q))*sizeof(char));

              if (z!=1)
              {
                       strcpy(newtext[q], a);
              }         
                 
                                  
           for(j = 0; j < 81; j ++)// чистим s
             {
                     a[j]='\0';
             }
              
              
             }  
             

      for (i = 0; i < 81; i ++)
      {
          free (s[i]);
      }     
       free (s);
      
      
      

            
                      
        return newtext; 
}[/PHP]

Решил реализовать через двумерный массив, тоесть разбить строку [a] на слова и символы. Собственно если удалить 
[PHP]for (y=0; z!=1; y<80; y++) //z - 
                 {
                      if ( *(*(s+y))!=' '|| '!')//
                       {
                                   if (strlen(*(s+m))%2!=0
                                    {
                                                          
                                                           q++;// + к количеству строк
                                    }     
    
                                    else
                                    {
                                         z=1;
                                    }      
                       }   
                  }
то программа компилируется.

Последний раз редактировалось Stilet; 30.01.2012 в 22:45.
Gromoshtannik вне форума Ответить с цитированием
Старый 30.01.2012, 22:15   #2
Gromoshtannik
Новичок
Джуниор
 
Регистрация: 30.01.2012
Сообщений: 4
По умолчанию

Весь код:
Код:
#include <stdio.h>
#include <conio.h>
#include "cstdlib"
#include <stdlib.h>
#include <string.h>
//++++++++++++++++++++++++++++++ Ìåíþ +++++++++++++++++++++++++++++
void Menu()
{
printf(      "                                     MENU                                      ");
printf  (    "   ---------------------------- 1.Vvod texta -----------------------------------\n"
             "  ---------------------------- 2.Kontrolniy vyvod texta -----------------------\n"
             "  ---------------------------- 3.Obrabotka              -----------------------\n"
             "  ---------------------------- 4.Kontrolniy vyvod textanew --------------------\n"
             "  ---------------------------- 5.Spravka --------------------------------------\n"
             "  ---------------------------- 6.Vyhod is programmy ---------------------------\n"
             "\n\nVvedite punkt: ");
}
//+++++++++++++++++++++++++++ Ïîìîùü ++++++++++++++++++++++++++++++++
void Help()
{
      printf("Vsiakaya vsyachina\n");
}



//+++++++++++++++++++++Ââîä òåêñòà+++++++++++++++++++++++++++++++++
char** Vvod(int* kolstrok)
{
      char** text = NULL;      // Äâóìåðíûé ìàññèâ        
      int i;                   // Ñ÷åò÷èê ïî ñòðîêàì
      int j;                   // Ñ÷åò÷èê ïî ñèìâîëàì
      int t;                   // Ïåðåìåííàÿ äëÿ îðãàíèçàöèè ïåðåõîäà íà ñëåäóþùóþ ñòðîêó
      int g=0;                 // Ïåðåìåííàÿ äëÿ îðãàíèçàöèè âûõîäà èç íàáîðà ìåíþ
      char s[81];              // Ââîäèìàÿ ïîëüçîâàòåëåì ñòðîêà
      printf("\nVvedite text\n\n");
      for(i = 0; g!= 1; i ++)
            { 
              t = 0;
              for(j = 0; t != 1; j ++)
                    {
                      s[j] = getchar();  //ââîä ñèìâîëà
                      if(s[j] == '\n')
                            {
                              t = 1;
                              s[j] = '\0';  
                            }
                      if(s[0] == '\0')
                            g = 1;
                      
                    }    
              text = (char **) realloc(text,(i+1)*sizeof(char*));
              text[i] = (char *) malloc((strlen(s)+1)*sizeof(char));
              strcpy(text[i], s); 
              for(j = 0; j < strlen(s); j ++)
                    s[j] = 0;
            }
      *kolstrok = i; 
      return text;
}
//+++++++++++++++++++++++++++Âûâîä òåêñòà+++++++++++++++++++++++++
void Vyvod(char** massiv, int kl)
{
      int i;    
      for(i = 0; i < kl; i ++)
            {
              puts(*(massiv+i));
            } 
} 





//+++++++++++++++++Îñâîáîæäåíèå äèíàìè÷åñêîé ïàìÿòè+++++++++++++++++++
char** Free(char** text, int kolstrok)
{
      int i;
      for (i = 0; i < kolstrok; i ++)
      free (text[i]); 
      return NULL;
}

Последний раз редактировалось Stilet; 30.01.2012 в 22:45.
Gromoshtannik вне форума Ответить с цитированием
Старый 30.01.2012, 22:17   #3
Gromoshtannik
Новичок
Джуниор
 
Регистрация: 30.01.2012
Сообщений: 4
По умолчанию

Код:
//+++++++++++++++++ÎÁÐÀÁÎÒÊÀ+++++++++++++++++++
char** proverka(char** text, int kolstrok)
{
      int i;                               
      int j;                             
      int t=0;                            
      int g=0;                            
      int y;                          
      int z=1;                           
      int q;                           
      char** newtext = NULL;             
      char a[81];                                   
      char** s;
      int m=0;
      
     s = (char **) malloc(81*sizeof(char*));
     for (i=0; i<81; i++)
     {                                                               // Âûäåëåëè ïàìÿòü äëÿ S
         s[i]= (char *) malloc(strlen(*(s+q))*sizeof(char));  
     }    


             for(i = 0; i < kolstrok; i ++)
            {
              for(j = 0; j < strlen(*(text+i)); j ++)// ìåíüøå ðàçìåðà i-îé ñòðîêè
             {

             a[j+1]='\0';//Ñëåäóþùèé ñèìâîë - ñèìâîë êîíöà ñòðîêè
             a[j] = *(*(text+i)+j); //ïðèñâàèâàåì i-ìó ýëåìåíòó ìàññèâà j-èé ñèìâîë
 
             if (a[j]!=' ' || '!')//äîïèñàòü âñå îñòàëüíûå ñèìâîëû!!!
                 {
                  *(*(s+t)+g)=a[j];
                  g++;  //ââîäèì â ñëåäóþùèþ ÿ÷åéêó ñèìâîëà     
                 }                     
             else
                 {
                  *(*(s+t)+g)=a[j];                    
                  t++;  //ââîäèì â ñëåäóþùèþ ñòðîêó                
                 }  
               }
               
              for (y=0; z!=1; y<80; y++) //z - åñòü ëè çíàêè ïðåïèíàíèÿ â ñòðîêå
                 {
                      if ( *(*(s+y))!=' '|| '!')//äîïèñàòü âñå îñòàëüíûå ñèìâîëû!!!
                       {
                                    if (strlen(*(s+m))%2!=0
                                    {
                                                          
                                                           q++;//ñ÷åò÷èê êîë-âà ñòðîê íîâîãî òåêñòà
                                    }         
                                    else
                                    {
                                         z=1;
                                    }             
                       }   
                  } 
                  
              //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
              newtext = (char **) realloc(newtext,(q+1)*sizeof(char*));///i+1 - êîëëè÷åñòâî ñòðîê
              newtext[q] = (char *) malloc(strlen(*(s+q))*sizeof(char));
              //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
              if (z!=1)
              {
                       strcpy(newtext[q], a);
              }         
                 
                                  
           for(j = 0; j < 81; j ++)// ìåíüøå ðàçìåðà q-îé ñòðîêè
             {
                     a[j]='\0';
             }
              
              
             }  
             

      for (i = 0; i < 81; i ++)
      {
          free (s[i]);
      }     
       free (s);
      
      
      

            
                      
        return newtext; 
}

Последний раз редактировалось Stilet; 30.01.2012 в 22:45.
Gromoshtannik вне форума Ответить с цитированием
Старый 30.01.2012, 22:17   #4
Gromoshtannik
Новичок
Джуниор
 
Регистрация: 30.01.2012
Сообщений: 4
По умолчанию

Код:
int main()                                                     //ãëàâíàÿ ôóíêöèÿ
{     
      int kolstrok = 0;                                               // Ïåðåìåííàÿ,ñîäåðæàùàÿ êîëè÷åñòâî ñòðîê
      int f, x = 0;                                            //Ïåðåìåííûå äëÿ îðãàíèçàöèè èíòåðôåéñà
      char **text = NULL;
      char **newtext = NULL;            // Äâóìåðíûå ìôàññèâû
      printf("111\n\n");
      do
            {
              Menu();
              scanf("%d", &f);
              fflush(stdin);
              system("cls");
              switch(f)
                    {
                      case 1:
                                if (text!= NULL)
                                text = Free(text, kolstrok);
                                x = 1;   
                                text = Vvod(&kolstrok);  
                                break;
                      case 2:
                                if (x == 0)
                                       printf("\nOshibka, vvedite 1-iy punkt\n\n");
                                else                                           
                                           {
                                             printf("\nKontrolniy vyvod texta\n\n");
                                             Vyvod(text, kolstrok);
                                           }  
                                break; 
                      case 3:
                                if (x == 0)
                                   printf("\nOshibka, vvedite 1-iy punkt\n");
                                else
                                      {
                                       if (newtext != NULL)
                                              Free(newtext, kolstrok);
                                        newtext = proverka(text, kolstrok);
                                        printf("Vse OK\n");
                                      } 
                                break;
                      case 4:
                                if (x == 0)
                                printf("\nOshibka, vvedite 1-iy punkt\n");
                                else
                                    {  
                                       Vyvod(newtext, kolstrok); 
                                    }
                                   
                                break;
                      
                      case 5:                               
                                 Help();                              
                                 printf("\nDlya vyhoda nagmite lybuy klavishy...\n\n");
                                 getch();
                                 break;
                              
                      case 6: 
                                if (text!= NULL)
                                      Free(text, kolstrok);
                                if (newtext != NULL)
                                      Free(newtext, kolstrok);
                                printf("\nDlya vyhoda nagmite lybuy klavishy...\n\n");
                                getch();
                                break;
                          default:  
                                printf("\nOshibka, vvedite nomer operacii: \n\n");
                    }
             }
      while(f != 6);     
}

Последний раз редактировалось Stilet; 30.01.2012 в 22:46.
Gromoshtannik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из ячейки содержащей текст и число извлечь только число? АННА-ЕАО Microsoft Office Excel 35 02.12.2016 23:16
удаление строки содержащей сочетание 2 цифр papikyandgan Помощь студентам 0 05.10.2011 20:19
Поиск строки, содержащей наибольшее количество пробелов Студент1000 Microsoft Office Word 3 28.05.2011 00:27
Если слово нечетной длины, то удалить его среднюю букву belichkina Общие вопросы C/C++ 2 11.05.2011 16:19
если слово нечетной длины,то удалить его первую букву!!! locdoc Помощь студентам 2 06.12.2010 16:35