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

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

Восстановить пароль Регистрация
 
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 18:59     Строки и нахождения слова длинее #1
всем привет
дано такое задание
Написать и протестировать функцию Fstr(str1, str2), возвращающую самое длинное общее слово строк str1 и str2. Если общих слов нет, возвратить NULL. Словом считать последовательность символов, не содержащую обобщённых пробелов.

ума не приложу каким образом сделать
написать функцию для организации ввода в строку символы могу но как сделать чтоб находить одинак послед символов и еще там где больше вывести на экран..
help.... please
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 18:59     Строки и нахождения слова длинее
Посмотрите здесь:

1. Скопировать из файла F1 в файл F2 строки, которые не содержат слова, начинающиеся на одну букву 2. Определить номер слова в котором больше всего г C++
C++ Переместить первую букву слова в конец слова(Строки)
C++ Напечатайте все слова из строки, отличные от заданного слова
Ввести строку. Выдать все слова, которые имеют длину больше, чем длина последнего слова строки C++
Напечатать те слова данной строки, которые отличны от последнего слова, и в слове нет повторяющихся букв C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.03.2011, 19:09     Строки и нахождения слова длинее #2
Пробуй
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define DELIM " \t:;,.?!"
 
int chek_inp_corr(char *words[], int len){
  int i, j, flag;
  for(i = 0; i < len; ++i){
    flag = 1;
    for(j = 0; j < len; ++j)
      if( i != j && !strcmp(words[i], words[j]))
        flag = 0;
    if( !flag )
      return 1;
  }
  return 0;
}
 
int main(void){
  char str[BUFSIZ], str1[BUFSIZ], *words[BUFSIZ],
  *p, *p_ , *max_word;
  int len = 0, i, j, flag, cnt = 0;
  printf("\n\nInput str1 -> ");
  fgets(str, BUFSIZ, stdin);
  printf("\n\nInput str2 -> ");
  fgets(str1, BUFSIZ, stdin);
  for(p = strtok(str, DELIM); p; p = strtok(NULL, DELIM)){
    if( strchr(p, '\n') )
       p[strlen(p) - 1] = '\0';
    words[len] = (char *)malloc(sizeof(char)*strlen(p));
    strcpy(words[len], p);
    ++len;
  }
  for(p_ = strtok(str1, DELIM); p_; p_ = strtok(NULL, DELIM)){
    if( strchr(p_, '\n') )
       p_[strlen(p_) - 1] = '\0';
    words[len] = (char *)malloc(sizeof(char)*strlen(p_));
    strcpy(words[len], p_);
    ++len;
  }
  if(!chek_inp_corr(words, len)){
    fprintf(stderr, "INPUT ERROR");
    exit(1);
  }
  for(i = 0; i < len; ++i){
    flag = 1;
    for(j = 0; j < len; ++j)
      if( i != j && !strcmp(words[i], words[j]))
        flag = 0;
    if( !flag ){
      if( !cnt )
        max_word = words[i];
      else{
        if( strlen(words[i]) > strlen(max_word) )
          max_word = words[i];
      }
        ++cnt;
    }
  }
  printf("\n\nReslut word -> %s", max_word);
  return 0;
}
Добавлено через 1 минуту
И еще тут есть.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 19:27  [ТС]     Строки и нахождения слова длинее #3
как бы она... но работает некорректно ибо не пишет значение null если нет одинаковых
да и как то намудренно там ибо надо наляпать как то одну функцию ... Fstr
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
14.03.2011, 19:30     Строки и нахождения слова длинее #4
eddilou, а что мешает переименовать функцию?

C++
1
[quote=asics;1450210]int chek_inp_corr(char *words[], int len)[/quote]
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 19:34  [ТС]     Строки и нахождения слова длинее #5
видешь ли ты там прототип то определен типа Fstr(str1, str2) сотв стр1 и стр2 типа чар
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.03.2011, 19:39     Строки и нахождения слова длинее #6
eddilou, Я тебе дал пример, под свои нужды переделывать будеш сам.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 19:43  [ТС]     Строки и нахождения слова длинее #7
постараюсь просто смущает int в прототипе
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.03.2011, 19:44     Строки и нахождения слова длинее #8
Да, в теме уже ответили. Выложу, чтобы мои труды не пропали зря. Идея вот в чём: нужно составить список общих слов и потом в нём найти самое длинное.

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
#include <iostream>
#include <string>
#include <list>
 
using namespace std;
 
// разбить строку на слова
void breakString( string &str, list<string> &out )
{
    string::iterator it1 = str.begin();
    string::iterator it2;
 
    while( it2 != str.end() )
    {
        while( !isalnum(*it1) && it1 != str.end() )
            it1++;
 
        if( it1 == str.end() )
           break;
 
        it2 = it1;
 
        while( isalnum(*it2) && it2 != str.end() )
        {
            *it2 = toupper( *it2 );
            it2++;
        }
 
        string word( it1, it2 );
        out.push_back( word );
 
        it1 = it2;
    }
}
 
// найти общие слова двух строк
void overallWords( string &str1, string &str2, list<string> &out )
{
    list<string> words1, words2;
 
    breakString( str1, words1 );
    breakString( str2, words2 );
 
    //найти общие слова
    for( list<string>::const_iterator it1 = words1.begin(); it1 != words1.end(); it1++ )
    {
        for( list<string>::const_iterator it2 = words2.begin(); it2 != words2.end(); it2++ )
        {
           if( *it1 == *it2 )
              out.push_back( *it1 );
        }
    }
 
}
 
int main( int argc, char ** argv )
{
    string str1, str2;
    list<string> overall;
 
    cout << "Enter first string:\n>";
    getline( cin, str1 );
 
    cout << "Enter second string:\n>";
    getline( cin, str2 );
 
    // получить список общих слов строк
    overallWords( str1, str2, overall );
 
    if( overall.size() == 0 )
    {
        cout << "No overall words." << endl;
    }
    else
    {
        cout << "\n\nOverall words:\n";
 
        // найти самое длинное
        unsigned usLongest = 0;
        list<string>::const_iterator itLongest;
 
        for( list<string>::const_iterator it = overall.begin(); it != overall.end(); it++ )
        {
            unsigned lng = (*it).length();
 
            if( lng > usLongest )
            {
                usLongest = lng;
                itLongest = it;
            }
 
            cout << *it << "; ";
        }
 
        cout << "\n\nLongest overall word: " << *itLongest << " (" << usLongest << " symbols)" << endl;
    }
 
    return 0;
}
EDIT:
Не заметил часть задания с FStr. Впрочем, переделывается легко.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
14.03.2011, 19:45     Строки и нахождения слова длинее #9
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
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
 
using namespace std;
int Fstr(char* str1, char* str2)
{
     
     return 0;
}
 
int main()
{
     char str1[1000];
     char str2[1000];
     cout<<"Input line 1: ";
     cin.getline(str1, sizeof(str1));
     cout<<"Input line 2: ";
     cin.getline(str2, sizeof(str2));
     char *ptr1 = str1;
     char *ptr2 = str2;
     cout<<Fstr(ptr1, ptr2);
 
     getch();
     return 1;
}
это первый кусок, чуть попозже если не добавят докончу функцию твою..ща занят немного
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.03.2011, 19:47     Строки и нахождения слова длинее #10
Цитата Сообщение от eddilou Посмотреть сообщение
постараюсь просто смущает int в прототипе
Да нет в моем коде прототипа функции, там зразу реализация.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 19:51     Строки и нахождения слова длинее
Еще ссылки по теме:

C++ Получить из файла строки, содержащие четырехбуквенные слова. Слова отсортировать в алфавитном порядке
Написать программу добавления слова «hello» после первого слова введенной строки C++

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

Или воспользуйтесь поиском по форуму:
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 19:51  [ТС]     Строки и нахождения слова длинее #11
эх.. знал бы я эт с++ небыло бы проблем ...
а так только новичок в си......
Yandex
Объявления
14.03.2011, 19:51     Строки и нахождения слова длинее
Ответ Создать тему
Опции темы

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