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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Quarintium
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 34
#1

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

24.05.2014, 18:41. Просмотров 156. Ответов 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");
      }
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 18:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество слов, вставка слов в определённое место нечетной строки (C++):

Функция, получает строку слов и рзделителей, а на выходе имеет массив слов из строки и количество этих слов - C++
мне нужна функция, которая во входе получает строку слов и рзделителей (&quot; &quot;, &quot;,&quot;, &quot;.&quot;, &quot;_&quot;, &quot;&quot;&quot;), а на выходе имеет массив слов из строки...

Подсчитать количество слов нечетной длины в строке - C++
помогите пожалуйста! зделал задание на подсчёт всех слов, а вот на непарные не могу додумать как реализовать #include &lt;iostream&gt; ...

Найти количество слов четной и нечетной длины в строке - C++
Нужно создать программу С++, которая будет подсчитывать количество слов парной и непарной длины в строке, введённой с клавиатуры. Пока...

Дан текст, найти количество слов и количество слов, у которых первый и последний символ совпадают - C++
Помогите пожалуйста, выполнить задание. Дан текст из N символов. Группы символов, расположенные между пробелами и не содержащие...

строка с нечетной длиной слов - C++
Дана строка. Сформировать новую строку, скопировав в нее слова исходной строки, которые имеют нечетную длину, разделить слова пробелом. ...

Создать список из слов. Подсчитать количество слов, совпадающих с последним словом - C++
создать список из слов. подсчитать количество слов, совпадающих с последним словом. Удалить все таки слова, оставив одно последнее.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 18:41
Привет! Вот еще темы с ответами:

Создать список слов из файла и подсчитать количество повторения этих слов - C++
Здравствуйте. Помогите написать такую программу: в файле храниться текст. Нужно составить список слов из этого текста и посчитать частоту...

Дан массив слов. Определить количество слов массива, которые не являются «перевертышем». - C++
Дан массив слов. Определить количество слов массива, которые не являются «перевертышем». Разработать программу на языке Си....

Стек: создать список из слов, подсчитать количество слов, совпадающих с последним словом - C++
Создать список из слов. подсчитать количество слов, совпадающих с последним словом. Удалить все таки слова, оставив одно последнее. ...

Количество слов в заданной строке (для каждого из слов) - C++
дано символьная строка. Слово-последовательность символов между пробелами, не содержащие пробелы усередени себя. Для каждого из слов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru