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

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

Войти
Регистрация
Восстановить пароль
 
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
#1

Найти общие для двух данных строк слова - C++

16.12.2012, 01:12. Просмотров 907. Ответов 4
Метки нет (Все метки)

Написал программу вот по этому заданию: С клавиатуры вводятся две строки, содержащие некоторые слова, перечисленные через точку с запятой. Найти общие для этих строк слова и вывести их на экран.
Пример ввода:
строка 1: world;cat;dog;ball
строка 2: world;dog;processor;memory;programming
Результат: world dog
но у меня проблема несовместимости типов,не знаю как её исправить,вот код:
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
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string.h"
using namespace std;
int tsz(char* s)
{
    int a[50];
    int j=0;
    a[j]=0;
    for (int i=0;i<strlen(s);i++)
    {
        if (s[i]==';')
        {
            a[j+1]=i;
        j++;
        }
    }
    return *a;
    
}
char sl(char*s,int* a,int i)
{
char str[10];
 
        for(int j=a[i-1];j<a[i];j++)
        {
            str[j]=s[j];
        }
        return str[10];
}
void main()
{
    char str1[100];
    char str2[100]; 
    char s[100];
    cout<<"vvedite 1 stroku:";
    gets(str1);
    cout<<"vvedite 2 stroku:";
    gets(str2);
    for (int i=0;i<strlen(str1);i++)
        for (int j=0;j<strlen(str2);j++)
        {
            if (strcmp(sl(str1,tsz(str1),i),sl(str2,tsz(str2),j))==0)
                strcat(s,str1);
 
        }
        cout<<s;
        getch();
}
проблема вот тут
C++
1
if (strcmp(sl(str1,tsz(str1),i),sl(str2,tsz(str2),j))==0)
скажите пожалуйста как можно исправить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 01:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти общие для двух данных строк слова (C++):

Найти общие для двух заданных строк слова, и вывести их на экран - C++
Задание: &quot;/*С клавиатуры вводятся две строки, содержащие некоторые слова, перечисленные через точку с запятой. Найти общие для этих...

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

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

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

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

Найти общие элементы двух целочисленных массивов и отсортировать их по возрастанию - C++
добрый вечер, может кто-нить подсказать как найти общие элементы двух целочисленных массивов и отсортировать их по возрастанию. Массивы...

4
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.12.2012, 02:11 #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
#include "iostream"
#include "conio.h"
#include "string.h"
using namespace std;
int tsz(char* s)
{
    int a[50];
    int j=0;
    a[j]=0;
    for (int i=0;i<strlen(s);i++)
    {
        if (s[i]==';')
        {
            a[j+1]=i;
        j++;
        }
    }
    return *a;    
}
 
char* sl(char*s,int a,int *i)
{
char str[10];
 
        for(int j=a[i-1]; j<a[i]; j++)
        {
            str[j]=s[j];
        }
        return str/*[10]*/;
}
void main()
{
    char str1[100];
    char str2[100]; 
    char s[100];
    cout<<"vvedite 1 stroku:";
    gets(str1);
    cout<<"vvedite 2 stroku:";
    gets(str2);
    for (int i=0; i<strlen(str1); i++)
        for (int j=0;j<strlen(str2);j++)
        {
            
            if (strcmp(sl(str1, tsz(str1), &i), sl(str2, tsz(str2), &j))==0)
                strcat(s,str1);
 
        }
        cout<<s;
        getch();
}
Да, и ещё - обязательно "полистайте" Стива Макконнелла "Совершенный код".
1
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
16.12.2012, 02:21  [ТС] #3
а как понимать
C++
1
return str/*[10]*/;
?
0
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.12.2012, 02:32 #4
Имя массива - это указатель на его нулевой элемент.
C++
1
return str;
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
16.12.2012, 04:27  [ТС] #5
а что значит при отладке ошибка - "Нарушение прав доступа при чтении"?

Добавлено через 57 минут
В продолжении темы,можете указать где сейчас неправильно написано,про отладке выдаёт набор символов и содержимое второй строки,хотя я её даже не прибавляю к той строке которую вывожу
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
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string.h"
using namespace std;
int* tsz(char s[])
{
    int* a=new int[50];
    int j=0;
    a[0]=0;
    for (int i=0;i<strlen(s);i++)
    {
        if (s[i]==';' || '\0')
        {
            a[j+1]=i;
        j++;
        }
    }
    return a;    
    delete [] a;
}
 
char* sl(char s[],int a[],int *i)
{
char str[15];
 
        for(int j=a[*i-1]; j<a[*i]; j++)
        {
            str[j]=s[j];
        }
        return  str;
}
void main()
{
    char str1[100];
    char str2[100]; 
    char s[100];
    cout<<"vvedite 1 stroku:";
    gets(str1);
    cout<<"vvedite 2 stroku:";
    gets(str2);
    for (int i=1; i<strlen(str1); i++)
        for (int j=1;j<strlen(str2);j++)
        {
        
            if (strcmp(sl(str1,tsz(str1), &i), sl( str2, tsz(str2), &j))==0)
                strcat(s,str1);
            
        }
        cout<<s;
        getch();
}
0
16.12.2012, 04:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 04:27
Привет! Вот еще темы с ответами:

Вывести два предложения и распечатать самые длинные слова, общие для этих предложений - C++
Здравствуйте. Мне необходима помощь (консультация) на счёт задачи: Вывести два предложения и распечатать самые длинные слова,...

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

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

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


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

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

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