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

строки и вхождения - C++

Восстановить пароль Регистрация
 
 
MadBittern
 Аватар для MadBittern
6 / 6 / 1
Регистрация: 12.11.2012
Сообщений: 190
27.01.2013, 21:08     строки и вхождения #1
доброго времени суток всем! не обессудьте но снова зашел в тупик мож кто поможет:
7.Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами.
Определить самое длинное слово в каждой строке и подсчитать количество его вхождений.

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

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
/*7.  Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами. 
Определить самое длинное слово в каждой строке и подсчитать количество его вхождений.*/
#include <iostream>
#include <windows.h>
#include <cstring>
#include <fstream>
using namespace std;
void entry();
int main()
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    char string1[101], string2[101];
    size_t cnt = 0;
    
    cout << "Введите первую строку:\n";
    cin.getline(string1,101);
    cout << "Введите вторую строкe:\n";
    cin.getline(string2,101);
     
    char * pch1 = strtok (string1," "),  // получаем первое слово
         * word1 = 0; // самое длинное слово
 
    int length1 = strlen(pch1);          // определяем длинну первого слова
 
    int maxLen1 = 0; // самое длинное слово
 
      while (pch1 != NULL)                         // пока есть слова
      {
          length1 = strlen(pch1);        // определяем длинну слова
 
          if (maxLen1 < length1 )        // определяем самое длинное слово
          {
              maxLen1 = length1;
              word1 = pch1;              // сохраняем указатель на текущее слово
          }
 
          pch1 = strtok (NULL, " "); // получаем следующее слово
      }
       
      cout << "Самое длинное слово в первой строке: " << word1
           << " , его длина равна: " << maxLen1
           << " символов " <<"Количество вхождений: " <<  endl;
 
      /*проводим аналогичные действия со второй строкой*/
      char * pch2 = strtok (string2," "), * word2 = 0; 
    int length2 = strlen(pch2);          
 
    int maxLen2 = 0; 
 
      while (pch2 != NULL)                         
      {
          length2 = strlen(pch2);        
 
          if (maxLen2 < length2 )       
          {
              maxLen2 = length2;
              word2 = pch2;              
          }
 
          pch2 = strtok (NULL, " "); 
      }
      
      cout << "Самое длинное слово во второй строке: " << word2
           << " , его длина равна: " << maxLen2
           << " символов" <<"Количество вхождений: " <<  endl;
      system("Pause");
 
    return 0;
}
подсчет вхождений пробовал реализовать через этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int const la = strlen(a);
        int const lb = strlen(b);
        cout << "Строка: [" << b << "] \n";
        for(int i =0 ; i < la; i++){
                char tmp[S] = "";
                k=0;
                if(a[i] == b[0]){
                    int j = i;
                    while(a[j] == b[k]){
                        tmp[k] = a[j];
                        j++; k++;
                    }
                    if(!(strcmp(b,tmp)))cnt++;
                }
        }
применял его при выполнении лаб для нахождения вхождений одной строки в другую, соответственно сейчас заменяю все переменные на те что использую в задачи,но не чего не выходит((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MadBittern
 Аватар для MadBittern
6 / 6 / 1
Регистрация: 12.11.2012
Сообщений: 190
27.01.2013, 22:52  [ТС]     строки и вхождения #21
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Потому что ты не даёшь щитать всю строку, а только первое слово, strtok изменяет орыгинал.
Эта ф-ция аналогична твоей.
можно по подробнее про strtok

делаю через вызов функции. как понять деформирую строки если я их с клавы ввожу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
27.01.2013, 22:54     строки и вхождения #22
Твой полностю работающий пример.
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <cstring>
#include <fstream>
using namespace std;
 
int Find_Count(char * string1, char * word1);
 
int main(){
    setlocale(LC_ALL,"Russian");
 
    char string1[101], string2[101];
    
    char s1[101];
    char s2[101];
 
    size_t cnt = 0;
    
    cout << "Введите первую строку:\n";
    cin.getline(string1, 101);
    strcpy(s1, string1);
    cout << "Введите вторую строкe:\n";
    cin.getline(string2, 101);
    strcpy(s2, string2);
 
    char * pch1 = strtok(string1, " ");
    
    char * word1; // самое длинное слово
 
    int length1 = strlen(pch1); // определяем длинну первого слова
 
    int maxLen1 = 0; // самое длинное слово
 
      while(pch1 != NULL)                         // пока есть слова
      {
          length1 = strlen(pch1);        // определяем длинну слова
 
          if (maxLen1 < length1 )        // определяем самое длинное слово
          {
              maxLen1 = length1;
              word1 = pch1;              // сохраняем указатель на текущее слово
          }
          cout << pch1;
          
          pch1 = strtok(NULL, " "); // получаем следующее слово
      }
       
      cout << "Самое длинное слово в первой строке: " << word1
           << " , его длина равна: " << maxLen1
           << " символов " << endl << "Количество вхождений: " << Find_Count(s1, word1) <<  endl;
 
      /*проводим аналогичные действия со второй строкой*/
      char * pch2 = strtok (string2, " ");
      
      char * word2 = 0; 
    
      int length2 = strlen(pch2);          
 
      int maxLen2 = 0; 
 
      while (pch2 != NULL){
 
          length2 = strlen(pch2);        
 
          if (maxLen2 < length2 )       
          {
              maxLen2 = length2;
              word2 = pch2;              
          }
 
          pch2 = strtok (NULL, " "); 
      }
      
      cout << "Самое длинное слово во второй строке: " << word2
           << " , его длина равна: " << maxLen2
           << " символов" << endl << "Количество вхождений: " << Find_Count(s2, word2) <<  endl;
 
      system("Pause");
 
    return 0;
}
 
int Find_Count(char * string, char * word){
    
        int i, j, count = 0;
        
         for(i = 0; i < (strlen(string)); i++){
 
                 for( j = 0; string[ i + j ] == word[ j ]; j++ );
 
                  if( j == strlen( word ) )
                  {
                             count++;
                  }
         }
         return count;
}
MadBittern
 Аватар для MadBittern
6 / 6 / 1
Регистрация: 12.11.2012
Сообщений: 190
27.01.2013, 23:09  [ТС]     строки и вхождения #23
спасибо большое, только в чем же ошибка была особо большой разницы я не заметил, только не считает последние слова в стоках но это как оговаривалось выше надо с границами по колдовать. не ну мне интересно делал почти тоже самое почему не выходило((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2013, 23:12     строки и вхождения
Еще ссылки по теме:

Позиция самого правого вхождения строки t в строку s C++
Как найти позицию вхождения строки? C++
позиции вхождения второй строки в первую C++

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

Или воспользуйтесь поиском по форуму:
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
27.01.2013, 23:12     строки и вхождения #24
Переменные
C++
1
char string1[101], string2[101];
Изменяются так же после использования strtok, и они уже имеют не Hello world, а просто Hello, завели пару переменных для хранения орыгиналов и всё, ну это так чтобы не менять основную чать кода, а изменить всё с краю.
Yandex
Объявления
27.01.2013, 23:12     строки и вхождения
Ответ Создать тему
Опции темы

Текущее время: 14:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru