0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
1

Даны три слова.Напечатать их общие буквы (из паскаля в с++)

01.05.2012, 18:21. Показов 5633. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program q;
var         s1,s2,s3:string;
            m1,m2,m3,m4:set of char;
            l1,l2,l3,i1,i2,i3:integer;
            j:char;
begin
readln(s1,s2,s3);
l1:=length(s1);
l2:=length(s2);
l3:=length(s3);
m1:=[];
m2:=[];
m3:=[];
for i1:= 1 to l1 do
                    m1:=m1+[s1[i1]];
for i2:= 1 to l2 do
                    m2:=m2+[s2[i2]];
for i3:= 1 to l3 do
                    m3:=m3+[s3[i3]];
m4:=m1*m2*m3;
for j:='a' to 'z' do
if j in m4 then write(j);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2012, 18:21
Ответы с готовыми решениями:

Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать
Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.

Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать
Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать . ...

Даны три слова.Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.
1 - Строки. Даны три слова.Напечатать их общие буквы. Повторяющиеся буквы каждого слова не...

Даны три слова. Напечатать их общие буквы
Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать. ...

31
6 / 6 / 6
Регистрация: 11.06.2011
Сообщений: 24
01.05.2012, 19:13 2
Напишите текст задания.
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
01.05.2012, 20:02  [ТС] 3
Даны три слова.Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.

Добавлено через 45 минут
сможете чем нибудь помочь?
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
01.05.2012, 23:34 4
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
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
 
//-------------------
typedef std::set<char> set_of_char_t;
typedef std::ostream_iterator<char> char_ostream_iter_t;
 
//-------------------
set_of_char_t set_from_string(const std::string& s)
{
    return set_of_char_t(s.begin(), s.end());
}
 
//-------------------
set_of_char_t intersection_of(const set_of_char_t& a, const set_of_char_t& b)
{
    set_of_char_t r;
    std::set_intersection(a.begin(), a.end(),
                          b.begin(), b.end(),
                          std::inserter(r, r.begin()));
    return r;
}
 
//-------------------
int main()
{    
    std::string s1;
    std::cout << "first: ";
    if(!(std::cin >> s1)) return 1;
 
    std::string s2;
    std::cout << "second: ";
    if(!(std::cin >> s2)) return 1;
 
    std::string s3;
    std::cout << "third: ";
    if(!(std::cin >> s3)) return 1;
 
    //-------------------
    set_of_char_t r = intersection_of(set_from_string(s1),
                                      intersection_of(set_from_string(s2), set_from_string(s3)));
 
    std::copy(r.begin(), r.end(), char_ostream_iter_t(std::cout, " "));
    std::cout << "\n";
}
Добавлено через 7 минут
ну, и ещё вариант с простым перебором
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
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstddef>
 
int main()
{
    const size_t n = 50;
    char s1[n], s2[n], s3[n];
 
    std::cout << "first: ";
    if(!(std::cin >> std::setw(n) >> s1)) return 1;
 
    std::cout << "second: ";
    if(!(std::cin >> std::setw(n) >> s2)) return 1;
 
    std::cout << "third: ";
    if(!(std::cin >> std::setw(n) >> s3)) return 1;
 
    //-------------
    char res[n] = {'\0'};
    for(size_t i = 0, j = 0; s1[i]; ++i)
        if(std::strchr(s2, s1[i]) && std::strchr(s3, s1[i]))
            if(!std::strchr(res, s1[i]))
                res[j++] = s1[i];
 
    std::cout << res << "\n";
}
1
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
02.05.2012, 00:10  [ТС] 5
большое спасибо

Добавлено через 3 минуты
а как тут можно сделать чтобы из файла считывал и выводил в файл

Добавлено через 7 минут
и ещё если есть возможно закоментировать строчку каждую чтобы разобраться с кодом
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
02.05.2012, 15:57 6
Цитата Сообщение от димарик Посмотреть сообщение
а как тут можно сделать чтобы из файла считывал и выводил в файл
Заменить std::cin и std::cout на объекты классов std::ifstream и std::ofstream соответственно.
Цитата Сообщение от димарик Посмотреть сообщение
и ещё если есть возможно закоментировать строчку каждую чтобы разобраться с кодом
Лучше спрашивай, что конкретно непонятно.
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
02.05.2012, 23:15  [ТС] 7
C++
1
2
3
4
5
6
7
8
std::cout << "first: ";
    if(!(std::cin >> std::setw(n) >> s1)) return 1;
 
    std::cout << "second: ";
    if(!(std::cin >> std::setw(n) >> s2)) return 1;
 
    std::cout << "third: ";
    if(!(std::cin >> std::setw(n) >> s3)) return 1;
вот эти три строчки не понятны частично

Добавлено через 30 секунд
C++
1
2
3
if(std::strchr(s2, s1[i]) && std::strchr(s3, s1[i]))
            if(!std::strchr(res, s1[i]))
                res[j++] = s1[i];
и вот эти

Добавлено через 2 часа 11 минут
у меня с файлами не получается она...может быть подскажите
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
03.05.2012, 13:10 8
std::cout << "first: ";
if(!(std::cin >> std::setw(n) >> s1)) return 1;

std::cout << "second: ";
if(!(std::cin >> std::setw(n) >> s2)) return 1;

std::cout << "third: ";
if(!(std::cin >> std::setw(n) >> s3)) return 1;
вот эти три строчки не понятны частично
C++
1
2
3
4
5
6
7
8
9
10
// ввод слова.
// std::setw устаналивает ограничение на количество символов, вводимое в s1
// в случае, если количество введённых символов превысит n, незаписанные
// в s1 символы останутся в буфере ввода и будут перенесены на следующую вводимую строку.
// Чтобы этого не произошло необходимо очистить буфер(см. исправленный вариант ниже)
std::cin >> std::setw(n) >> s1;
 
// если произошла ошибка при вводе
// (например, введен символ EOF(под Windows это Ctrl+Z)), программа завершается
if(!std::cin) return 1;
исправленный вариант, c очисткой буфера ввода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// ..............
#include <limits>
 
std::istream& clearbuf(std::istream& stream)
{
    return stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
 
int main()
{
    // ..............
    std::cout << "first: ";
    std::cin >> std::setw(n) >> s1;
    if(!std::cin) return 1;
    clearbuf(std::cin); // очищаем буфер ввода
 
    // ..............
    // и так для каждого из трёх слов
}
if(std::strchr(s2, s1[i]) && std::strchr(s3, s1[i]))
if(!std::strchr(res, s1[i]))
res[j++] = s1[i];
и вот эти
C++
1
2
3
4
5
6
7
//функци strchr проверяет встречается ли символ s1[i] в строках s2 и s3
if(std::strchr(s2, s1[i]) && std::strchr(s3, s1[i]))
// если s1[i] общий для всех строк проверяем нет ли такого
// символа в строке хранящей общие для всех трёх строк символы
    if(!std::strchr(res, s1[i]))
// если нет, помещаем его туда
        res[j++] = s1[i];
Добавлено через 13 часов 20 минут
Цитата Сообщение от димарик Посмотреть сообщение
у меня с файлами не получается она...может быть подскажите
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 <fstream>
#include <iomanip>
#include <cstring>
#include <cstddef>
#include <limits>
 
std::istream& clearbuf(std::istream& stream)
{    
    return stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
 
int main()
{
    const char* in_filename = "in.txt";
    const char* out_filename = "out.txt";
 
    //--------------
    const size_t n = 50;
    char s1[n], s2[n], s3[n];
 
    std::ifstream fin(in_filename);
    if(!fin.is_open()) return 2;
 
    fin >> std::setw(n) >> s1;
    if(!fin) return 1;
 
    clearbuf(fin);
    fin >> std::setw(n) >> s2;
    if(!fin) return 1;
 
    clearbuf(fin);
    fin >> std::setw(n) >> s3;
    if(!fin) return 1;
 
    fin.close();
 
    //-------------
    char res[n] = {'\0'};
    for(size_t i = 0, j = 0; s1[i]; ++i)
        if(std::strchr(s2, s1[i]) && std::strchr(s3, s1[i]))
            if(!std::strchr(res, s1[i]))
                res[j++] = s1[i];
 
    //------------
    std::ofstream fout(out_filename);
    if(!fout.is_open()) return 2;
 
    fout << res;
    if(!fout) return 3;
 
    fout.close();
}
Каждое слово входного в файле должно начинаться с новой строки.
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 19:39  [ТС] 9
std::istream& clearbuf(std::istream& stream)
{
return stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

для чего вот эти строчки
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
03.05.2012, 20:54 10
Я же написал выше, это функция очистки буфера ввода.
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 21:50  [ТС] 11
что-то в файле пишу три слова каждое с новой строки,а в out не выводит

Добавлено через 34 минуты
вот к примеру вот так сделал,но почему то у меня выводит в файл output 1 slovo:
вот код
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 <istream>
#include <iomanip>
#include <cstring>
#include <cstddef>
#include <cstdio>
using namespace std;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
const size_t n = 50;
char s1[n], s2[n], s3[n];
 
cout << "1 slovo: ";
if(!(cin >> setw(n) >> s1)) return 1;
 
cout << "2 slovo: ";
if(!(cin >> setw(n) >> s2)) return 1;
 
cout << "3 clovo: ";
if(!(cin >> setw(n) >> s3)) return 1;
 
//-------------
char res[n] = {'\0'};
for(size_t i = 0, j = 0; s1[i]; ++i)
if(strchr(s2, s1[i]) && strchr(s3, s1[i]))
if(!strchr(res, s1[i]))
res[j++] = s1[i];
 
cout << res << "\n";
}
помогите подправить
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
03.05.2012, 22:20 12
Цитата Сообщение от димарик Посмотреть сообщение
что-то в файле пишу три слова каждое с новой строки,а в out не выводит
Запусти это, и посмотри какую ошибку получишь. И приведи содержимое входного файла.
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 <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
#include <cstddef>
#include <limits>
 
//--------------
std::istream& clearbuf(std::istream& stream)
{
    return stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
 
//--------------
const char* error_message(int n)
{
    switch(n)
    {
        case 1:
            return "Error reading from file";
 
        case 2:
            return "Can`t open file";
 
        case 3:
            return "Error writing to file";
 
    }
 
    return "Unknown error";
}
 
//--------------
int main()
{
    const char* in_filename = "in.txt";
    const char* out_filename = "out.txt";
 
    //--------------
    const size_t n = 50;
    char s1[n], s2[n], s3[n];
 
    std::ifstream fin(in_filename);
    if(!fin.is_open())
    {
        std::cerr << error_message(2) << " \"" << in_filename << "\"\n";
        return 2;
    }
 
    fin >> std::setw(n) >> s1;
    if(!fin)
    {
        std::cerr << error_message(1) << " \"" << in_filename << "\"\n";
        return 1;
    }
 
    clearbuf(fin);
    fin >> std::setw(n) >> s2;
    if(!fin)
    {
        std::cerr << std::cerr << error_message(1) << " \"" << in_filename << "\"\n";
        return 1;
    }
 
    clearbuf(fin);
    fin >> std::setw(n) >> s3;
    if(!fin)
    {
        std::cerr << error_message(1) << " \"" << in_filename << "\"\n";
        return 1;
    }
 
    fin.close();
 
    //-------------
    char res[n] = {'\0'};
    for(size_t i = 0, j = 0; s1[i]; ++i)
        if(std::strchr(s2, s1[i]) && std::strchr(s3, s1[i]))
            if(!std::strchr(res, s1[i]))
                res[j++] = s1[i];
 
    //------------
    std::ofstream fout(out_filename);
    if(!fout.is_open())
    {
        std::cerr << error_message(2) << " \"" << out_filename << "\"\n";
        return 2;
    }
 
    fout << res;
    if(!fout)
    {
        std::cerr << error_message(3) << " \"" << out_filename << "\"\n";
        return 3;
    }
 
    fout.close();
}
1
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 22:25  [ТС] 13
ошибку никакую не выводит,в входной файл пишу
папа
мама
бабушка
а в выходном ничего не пишет
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
03.05.2012, 23:14 14
Цитата Сообщение от димарик Посмотреть сообщение
ошибку никакую не выводит,в входной файл пишу
папа
мама
бабушка
а в выходном ничего не пишет
В какой кодировке сохранён текстовый файл?
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 23:22  [ТС] 15
В кодировке ANSI
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
04.05.2012, 01:11 16
Цитата Сообщение от димарик Посмотреть сообщение
В кодировке ANSI
в таком случае это
Цитата Сообщение от димарик Посмотреть сообщение
ошибку никакую не выводит
очень сомнительно. Подозреваю, что ты запустил программу из среды разработки, после чего программа тут же завершилась, как бы не выдав никакой ошибки... Попробуй сделать так
1) cоздай файл in.txt в каталоге с исполняемым файлом
2) открой командную строку
3) перейди в каталог с исполняемым файлом
cd "путь_к_каталогу_с_исполняемым_файлом"
4) запусти исполняемый файл
имя_исполняемого_файла.exe
после этого в том же каталоге должен появится файл out.txt с результатом работы программы.
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
04.05.2012, 16:52  [ТС] 17
всё равного ничего в файл не выводит(

Добавлено через 1 минуту
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 <istream>
#include <iomanip>
#include <cstring>
#include <cstddef>
#include <cstdio>
using namespace std;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
const size_t n = 50;
char s1[n], s2[n], s3[n];
 
cout << "1 slovo: ";
if(!(cin >> setw(n) >> s1)) return 1;
 
cout << "2 slovo: ";
if(!(cin >> setw(n) >> s2)) return 1;
 
cout << "3 clovo: ";
if(!(cin >> setw(n) >> s3)) return 1;
 
//-------------
char res[n] = {'\0'};
for(size_t i = 0, j = 0; s1[i]; ++i)
if(strchr(s2, s1[i]) && strchr(s3, s1[i]))
if(!strchr(res, s1[i]))
res[j++] = s1[i];
 
cout << res << "\n";
}
может быть с этим кодом поможите,тут выводит в файл out только "1 slovo: "
если не сложно
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
04.05.2012, 21:05 18
Цитата Сообщение от димарик Посмотреть сообщение
всё равного ничего в файл не выводит(
Мда... Сделай скрины и выложи сюда, я хочу посмотреть, что и как ты делаешь.
Цитата Сообщение от димарик Посмотреть сообщение
может быть с этим кодом поможите,тут выводит в файл out только "1 slovo: "
если не сложно
Это тот же самый код, что и в моём первом посте, только с перенаправленным вводом-выводом.... Если у тебя в файл выводит только "1 slovo: " значит на следующей же строке произошёл выход из функции main, т.е. при чтении файла произошла ошибка...
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
04.05.2012, 21:13  [ТС] 19
ну я делаю так создал папку в ней сохранил файл проджект там создал два файла input и output дальше написал в файле in
mama
papa
babushka
дальше запустил код который вот кинул для исправки,и в итоге выводит только фразу "1 slovo:"
не знаю что такое(
а как вы делаете мошь я не так
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
04.05.2012, 21:29 20
Цитата Сообщение от димарик Посмотреть сообщение
ну я делаю так создал папку в ней сохранил файл проджект там создал два файла input и output дальше написал в файле in
mama
papa
babushka
Так в файле in написал или в файле input?
Цитата Сообщение от димарик Посмотреть сообщение
не знаю что такое(
а как вы делаете мошь я не так
Откомпилируй код из этого поста и сделай то, что написано здесь. После этого отпишись, что было выведено в консоль.
0
04.05.2012, 21:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2012, 21:29
Помогаю со студенческими работами здесь

Даны три слова. Напечатать их повторяющиеся буквы
Даны три слова. Напечатать их повторяющиеся буквы

Даны три слова. Напечатать те буквы слов, которые есть в одном из слов
Условие: Даны три слова. Напечатать только те буквы слов, которые есть только в одном из слов....

Даны три слова. Напечатать только те буквы слов, которые есть лишь в одном из слов.
Даны три слова. Напечатать только те буквы слов, которые есть лишь в одном из слов.

Даны два слова. Вывести на экран общие буквы в этих словах.
Помогите пожалуйста написать код. Даны два слова. Вывести на экран общие буквы в этих словах....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru