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

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

Войти
Регистрация
Восстановить пароль
 
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
#1

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

14.03.2011, 18:59. Просмотров 640. Ответов 10
Метки нет (Все метки)

всем привет
дано такое задание
Написать и протестировать функцию Fstr(str1, str2), возвращающую самое длинное общее слово строк str1 и str2. Если общих слов нет, возвратить NULL. Словом считать последовательность символов, не содержащую обобщённых пробелов.

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

Перепишите правильно программу, нахождения последнего слова из строки - C++
Нужно вывести последнее слово из строки, перепишите программу, запуталась #include <stdio.h> #include <string.h> main() { char...

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы - C++
Близиться сессия,а завтра мне сдавать 2 проги. Помогите ребят,могу даже 100 скинуть,если уж так трудно помочь. 8.Задан...

Функция strncpy не работает на строках длинее трех символов - C++
Подскажите, написал код... Хочу копировать каждое слово в g (т.е. s3). Функцией strncpy. Длину находит правильную, но при копировании...

Написать программу добавления слова «hello» после первого слова введенной строки - C++
Помогите( сколько искал ничего нету.

Написать программу добавления слова «hello» после первого слова введенной строки - C++
Написать программу добавления слова «hello» после первого слова введенной строки C++

Добавление слова «salut» после первого слова введенной строки - C++
Доброго времени суток. Нужна помощь со строками. Написать программу добавления слова «salut» после первого слова введенной строки. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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
Сообщений: 340
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
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.03.2011, 19:39 #6
eddilou, Я тебе дал пример, под свои нужды переделывать будеш сам.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 19:43  [ТС] #7
постараюсь просто смущает int в прототипе
talis
791 / 543 / 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
Сообщений: 340
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
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.03.2011, 19:47 #10
Цитата Сообщение от eddilou Посмотреть сообщение
постараюсь просто смущает int в прототипе
Да нет в моем коде прототипа функции, там зразу реализация.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
14.03.2011, 19:51  [ТС] #11
эх.. знал бы я эт с++ небыло бы проблем ...
а так только новичок в си......
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 19:51
Привет! Вот еще темы с ответами:

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

Найти слова строки, которые отличны от ее последнего слова, и в которых гласные/согласные чередуются - C++
Дана строка. Напечатать те слова этой строки, которые отличны от последнего слова и выполнено свойство: в слове гласные буквы (a, e, i, о,...

Строки: вывести слова с наименьшим количеством букв; удалить слова, начинающиеся с маленькой буквы - C++
Здравствуйте. Помогите, пожалуйста сделать программу... Задание: Составить программу, которая выводит на экран слова с наименьшим...

Напечатайте все слова из строки, отличные от заданного слова - C++
Дана строка , состоящая из слов, разделённых пробелами, и слово . Напечатайте все слова из строки , отличные от слова . Формат входных...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.03.2011, 19:51
Ответ Создать тему
Опции темы

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