Форум программистов, компьютерный форум CyberForum.ru

Количество слов, вставка слов в определённое место нечетной строки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программная модель движения шариков http://www.cyberforum.ru/cpp-beginners/thread1186894.html
вот код: #include <stdlib.h> #include <GL/glut.h> #include <GL/glaux.h> #include <math.h> #include <cmath> #pragma comment (lib, "glaux.lib") int w=800, h=600;
C++ Какую среду вы используете? Захотел я , значит, создать форму, да накидать на нее обьектов, да используя С++ (проект по аналогии с c# Windows Forms). Открываю "любимую" VS2013, перехожу на С++, а там и не пахнет таким. Только Win32-приложение, где всё писать ручками. Собственно, вопрос: в какой IDE есть встроенный Form Designer для С++ под ОС Windows.? http://www.cyberforum.ru/cpp-beginners/thread1186890.html
Задача на массив C++
Есть две задачи на массив верно выполнены, но нужно задавать массив с клавиатуры а не в самой программе, как это выполнить? в методичке не нашла выход #include <iostream> using namespace std; int main() { int a = {
C++ Разные результаты при расчетах с float и double
Здравствуйте! Почему при расчете с float и double получаю разные результаты? #include <iostream> #include <stdio.h> #include <math.h> using namespace std; void main () { float a=1000, b=0.0001, c, d, e, f, g;
C++ Написать функцию, определяющую, есть ли заданная компонента в стеке http://www.cyberforum.ru/cpp-beginners/thread1186857.html
Добрый вечер Задача: Создать стек. Написать функцию, определяющую, есть ли заданная компонента в стеке. заранее спасибо.
C++ Вычисление функции Здравствуйте! Помогите найти ошибку! Необходимо вычислить функцию 2 способами: 1) для заданной точности 2) для заданного n Не совпадают результаты: #include <iostream> #include <stdio.h> #include <conio.h> #include <math.h> using namespace std; подробнее

Показать сообщение отдельно
Quarintium
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 34

Количество слов, вставка слов в определённое место нечетной строки - C++

24.05.2014, 18:41. Просмотров 152. Ответов 0
Метки (Все метки)

Возникла проблема с подсчетом количества слов в тексте и вставкой слова в определённое место нечетной строки.
Не могу понять почему в одной функции выводится весь текст как надо, а в другой(подсчет слов/вставка слов) или первое слово или какая то ерунда...

текст храниться в char *text, потом при выводе на экран текста что то происходит и получается как я описал выше

вставка слов в определённое место нечетной строки у меня ещё не сделана... можете дать какой нибудь алгоритм?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
    
 
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
     
     
    #define MY_SIZE 4096
     
     
    void  Menu()       ;    //меню
    void  Input_Seps() ;    //ввод разделителей
    void  Input_Text() ;    //ввод текста
    void  qwgfd()      ;    //вставка слова в нечетные стороки
    void  Conv_Text()  ;    //убирает лишние разделители
    int   Num_Words()  ;    //неправильно считает кол-во слов! исправить!
    int   Proverka()   ;    //проверка введённой СТРОКИ
     
     
    char *buf    = NULL,    //для временного хранения строки
         *text   = NULL,    //для текста
         *razd   = NULL,    //для разделителей
         c[]     = "\n",    //для перехода на новую строку
         *presult= NULL,    //для преобразованной строки
         *token  = NULL;    //для слов из текста
    int  lim     = 0   ,    //предельное кол-во слов в тексте
         KolRaz  = 0   ,    //кол-во разделителей
         a       = 0   ;    //для меню
     
         
    int main()
    {  
        token=(char*)malloc(MY_SIZE*sizeof(char));
        Menu();
        system("PAUSE");
        return EXIT_SUCCESS;
    }
     
     
    void Input_Seps()//ерунда какая то в объяснении! исправить!
    {
      printf("Введите количество разделителей:");
      scanf("%i",&KolRaz);
      getchar();
      razd=(char*)malloc(KolRaz*sizeof(char));
      printf("  Введите разделители через пробел.\n");
      printf("  Если пробел будет является разделителем, то нажмите пробел три раза после\n");
      printf("последнего введённого вами разделителя и вводите следующий разделитель.\n");
      printf("  Если желаете ввести пробел как первым/последим разделителем, то нажмите \n");
      printf("пробел два раза перед/после следующим(-его) разделителем(-я).\n");
      for(int i=0; i<KolRaz; i++)
      {
        scanf("%c",&razd[i]);
        getchar();
      }
      printf("\nВаши разделители:");  
      for(int i=0;i<KolRaz;i++)
        printf("{%c} ",razd[i]);
      printf("\n");
      Menu();
    }
     
    void Menu()
    {
      printf("1.Ввести разделители\n");
      printf("2.Ввести текст\n");
      printf("3.Убрать одинаковые разделители\n");
      printf("4.Что-то здесь ещё будет\n");
      printf("5.Выход\n");
      scanf( "%i",&a);
      switch(a)
      {
        case 1:  Input_Seps();          break;
        case 2:  Input_Text();          break;
        case 3:  Conv_Text();           break;
        //case 4:  Proverka_Text();     break;
        case 5:  exit(0);               break;
        default: Menu();    
      }
    }
     
    int Proverka()
    {
       int *mass,i=0, bq=0,size;
       mass=(int*)calloc(1,sizeof(int));
       token = strtok( buf, razd );
       while( token != NULL )          //украсивить порядок, возможно можно упростить
       {
         *(mass+i)=strlen(token);      //в массив записывается размер слова
         mass=(int*)realloc(mass,(i+2)*sizeof(int));
         token = strtok( NULL, razd );//счетчик кол-ва слов
         i++;
       }
       *(mass+i)=i;                    //в последнюю ячейку записываем кол-во слов строки
       for(int h=0;h<i;h++)            //возможно можно объединить с предыдущим циклом
       {
         if (*(mass + h)==i) //сравнивает количество одинаковоразмерных слов
         {
           bq++;
         }
       }  
       free(token);
       if(bq==i)                       //все одинаковые - возвращает 0, не все- 1
         return 0;
       else
         return 1;
    }
     
    void Input_Text()
    {
      int i = 0;
      text=(char*)calloc(MY_SIZE,sizeof(char));
      buf =(char*)calloc(MY_SIZE,sizeof(char));
      getchar();
      printf("Введите текст:\n");
      do
      {
        gets(buf);
        int size = strlen(text) + strlen(buf) + 2;
        text=(char*)realloc(text,size*sizeof(char));
        strcat(text, buf);    
        strcat(text, c);
      }while(Proverka());
      printf("Ввод окончен!\n");
      Menu();
    }
     
    void Conv_Text()
    {
       int size;
       char s2[strlen(text)];
       strcpy(s2,text);
       token = strtok( text, razd );
       presult=(char*)calloc((strlen(token)+1),sizeof(char));
       while( (token != NULL ))
       {
         strcat(presult,token);
         int L=strlen(presult);
         presult[L+1]=0;                // сдвинули ноль на 1 символ
         int L1=token-text+strlen(token);
         presult[L]=s2[L1];
         token = strtok( NULL, razd );
         if (token != NULL)
         {
           size = strlen(presult) + strlen(token)+2;
           presult=(char*)realloc(presult,size*sizeof(char));
         }
       }
       text=presult;
       printf( "%s \n",text /*,Num_Words()*/);
       free(presult);
       qwgfd();
       Menu();
    }
     
    int Num_Words()                     //неправильно считает! исправить!
    {
      int slova=0;
      token = strtok( text, razd );
      while( token != NULL )            //украсивить порядок, возможно можно упростить
      {
        token = strtok( NULL, razd );  
        slova++;                        //счетчик кол-ва слов
      }
     
      return slova;
    }
     
    void qwgfd()
    {
      int a=0,b=0;
      printf( "текст = %s \n",text /*,Num_Words()*/);
      //printf("Введите после какого слова будете вставлять слово: \n");
      //scanf("%i",&a);
      for(int i=0; i<strlen(text);i++)
      {
        if(*(text+i)=='\n')
          printf("поймали перевод строки\n");
      }
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru