С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
MadBittern
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 199
#1

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

27.01.2013, 21:08. Просмотров 876. Ответов 23
Метки нет (Все метки)

доброго времени суток всем! не обессудьте но снова зашел в тупик мож кто поможет:
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++;
                }
        }
применял его при выполнении лаб для нахождения вхождений одной строки в другую, соответственно сейчас заменяю все переменные на те что использую в задачи,но не чего не выходит((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2013, 21:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос строки и вхождения (C++):

Найти все вхождения строки s в t - C++
Требуется написать программу, которая выводить на экран идексы всех вхождений строки s в строку t: abababababa aba 0 2 4 6 8 ...

Как найти позицию вхождения строки? - C++
Помогите, пожалуйста, с задачей: Нужно ввести с клавиатуры строку длиной не более 200 символов, ещё одну не более 10 символов и номер...

Найти все вхождения строки Т в строке S - C++
Найти все вхождения строки Т в строке S Помогите пожалуйста! И если можно на языке Си!!!

Удалить все вхождения символов из строки - C++
как удалить вхождение всех точек в строку, стандартными средствами, без цикла написанного вручную. Я сделал так но это не правильно find...

позиции вхождения второй строки в первую - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; int main(int argc, char* argv) { char str; char substr; ...

Удвоить все найденные вхождения строки в текст - C++
c++ visual Задание: дан текст и строка. удвойте все найденные вхождения строки. насколько я понимаю, если ввести текст &quot;мама мыла раму&quot;...

23
MadBittern
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 199
27.01.2013, 22:39  [ТС] #16
все заменил прикрутил к коду функцию
нарушение прав при чтении
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Find_Count( char *string1, char *word1 )
{
         int i, j, count = 0;
         for( i = 0; i < strlen( string1 ); i++ )
         {
                for( j = 0; string1[ i + j ] == word1[ j ]; j++ ); //тут 
                  if( j >= strlen( word1 ) )
                  {
                             count++;
                  }
         }
         return count;
}
вот в этой строчке
0
Lexp
3 / 3 / 1
Регистрация: 02.07.2012
Сообщений: 45
27.01.2013, 22:43 #17
Какие строки даете на вход?
0
MadBittern
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 199
27.01.2013, 22:47  [ТС] #18
странно ведь тут все работает
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
#include <iostream>
 
using namespace std;
 
int Find_Count( char *s1, char *s2 ) // s1 - где ищем, s2 - что ищем
{
         int i, j, count = 0;
         for( i = 0; i < strlen( s1 ); i++ )
         {
                  for( j = 0; s1[ i + j ] == s2[ j ]; j++ );
                  if( j == strlen( s2 ) )
                  {
                             count++;
                  }
         }
         return count;
}
 
int main()
{
    char *s1 = "qwerty  sdgdfg qwerty ertergfd    qwerty";
    char *s2 = "qwerty";
    cout << Find_Count( s1, s2 ) << endl;
 
    system( "pause" );
    return 0;
}
Добавлено через 1 минуту
да банальщина либо просто набор букв с произвольными пробелами либо ну к примеру: "привет привет как дела"
0
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
27.01.2013, 22:48 #19
Потому что ты не даёшь щитать всю строку, а только первое слово, strtok изменяет орыгинал.
Эта ф-ция аналогична твоей.
0
Lexp
3 / 3 / 1
Регистрация: 02.07.2012
Сообщений: 45
27.01.2013, 22:48 #20
Значит посмотрите, может где-то в процессе деформируете строки. И если вы это не через функцию вызываете...вызывайте через функцию.
0
MadBittern
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 199
27.01.2013, 22:52  [ТС] #21
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Потому что ты не даёшь щитать всю строку, а только первое слово, strtok изменяет орыгинал.
Эта ф-ция аналогична твоей.
можно по подробнее про strtok

делаю через вызов функции. как понять деформирую строки если я их с клавы ввожу
0
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;
}
0
MadBittern
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 199
27.01.2013, 23:09  [ТС] #23
спасибо большое, только в чем же ошибка была особо большой разницы я не заметил, только не считает последние слова в стоках но это как оговаривалось выше надо с границами по колдовать. не ну мне интересно делал почти тоже самое почему не выходило((
0
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, завели пару переменных для хранения орыгиналов и всё, ну это так чтобы не менять основную чать кода, а изменить всё с краю.
0
27.01.2013, 23:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2013, 23:12
Привет! Вот еще темы с ответами:

Позиция самого правого вхождения строки t в строку s - C++
Задание: Написать программу, выполняющую заданные действия над строками. Написать программу, которая выдает позицию самого правого...

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

Удалить из строки все вхождения заданного символа - C++
12. Преобразовать заданную строку следующим образом: удалить из строки все вхождения заданного символа; Соль в том что это нужно...

Функция поиска вхождения строки в заданную строку в С - C++
получил в универе такое задание Функция - Findwords(s,s1). Назначение - поиск вхождения в строку s заданной фразы (последовательности...


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

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

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