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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
01.05.2012, 18:21     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #1
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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 18:21     Даны три слова.Напечатать их общие буквы (из паскаля в с++)
Посмотрите здесь:

C++ задача на строки на С.Даны 2 слова.Напечатать только те буквы слов,которые встречаются в обоих словах только один раз.
Напечатать все слова, входящие в эту текстовую строку, заканчивающиеся на буквы заданного слова (например, abcdab, ab, kab) C++
в C++ Даны два слова.Вывести все общие буквы этих слов по одному разу. C++
C++ Даны два слова. Напечатать неповторяющиеся буквы
Даны три слова. Определить палиндромы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Drinker
 Аватар для Drinker
3 / 3 / 3
Регистрация: 11.06.2011
Сообщений: 24
01.05.2012, 19:13     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #2
Напишите текст задания.
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
01.05.2012, 20:02  [ТС]     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #3
Даны три слова.Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.

Добавлено через 45 минут
сможете чем нибудь помочь?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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";
}
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
02.05.2012, 00:10  [ТС]     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #5
большое спасибо

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

Добавлено через 7 минут
и ещё если есть возможно закоментировать строчку каждую чтобы разобраться с кодом
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.05.2012, 15:57     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #6
Цитата Сообщение от димарик Посмотреть сообщение
а как тут можно сделать чтобы из файла считывал и выводил в файл
Заменить std::cin и std::cout на объекты классов std::ifstream и std::ofstream соответственно.
Цитата Сообщение от димарик Посмотреть сообщение
и ещё если есть возможно закоментировать строчку каждую чтобы разобраться с кодом
Лучше спрашивай, что конкретно непонятно.
димарик
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 минут
у меня с файлами не получается она...может быть подскажите
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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
Регистрация: 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');
}

для чего вот эти строчки
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
03.05.2012, 20:54     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #10
Я же написал выше, это функция очистки буфера ввода.
димарик
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";
}
помогите подправить
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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();
}
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 22:25  [ТС]     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #13
ошибку никакую не выводит,в входной файл пишу
папа
мама
бабушка
а в выходном ничего не пишет
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
03.05.2012, 23:14     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #14
Цитата Сообщение от димарик Посмотреть сообщение
ошибку никакую не выводит,в входной файл пишу
папа
мама
бабушка
а в выходном ничего не пишет
В какой кодировке сохранён текстовый файл?
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 23:22  [ТС]     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #15
В кодировке ANSI
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
04.05.2012, 01:11     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #16
Цитата Сообщение от димарик Посмотреть сообщение
В кодировке ANSI
в таком случае это
Цитата Сообщение от димарик Посмотреть сообщение
ошибку никакую не выводит
очень сомнительно. Подозреваю, что ты запустил программу из среды разработки, после чего программа тут же завершилась, как бы не выдав никакой ошибки... Попробуй сделать так
1) cоздай файл in.txt в каталоге с исполняемым файлом
2) открой командную строку
3) перейди в каталог с исполняемым файлом
cd "путь_к_каталогу_с_исполняемым_файлом"
4) запусти исполняемый файл
имя_исполняемого_файла.exe
после этого в том же каталоге должен появится файл out.txt с результатом работы программы.
димарик
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: "
если не сложно
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
04.05.2012, 21:05     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #18
Цитата Сообщение от димарик Посмотреть сообщение
всё равного ничего в файл не выводит(
Мда... Сделай скрины и выложи сюда, я хочу посмотреть, что и как ты делаешь.
Цитата Сообщение от димарик Посмотреть сообщение
может быть с этим кодом поможите,тут выводит в файл out только "1 slovo: "
если не сложно
Это тот же самый код, что и в моём первом посте, только с перенаправленным вводом-выводом.... Если у тебя в файл выводит только "1 slovo: " значит на следующей же строке произошёл выход из функции main, т.е. при чтении файла произошла ошибка...
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
04.05.2012, 21:13  [ТС]     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #19
ну я делаю так создал папку в ней сохранил файл проджект там создал два файла input и output дальше написал в файле in
mama
papa
babushka
дальше запустил код который вот кинул для исправки,и в итоге выводит только фразу "1 slovo:"
не знаю что такое(
а как вы делаете мошь я не так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2012, 21:29     Даны три слова.Напечатать их общие буквы (из паскаля в с++)
Еще ссылки по теме:

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы C++
Из паскаля в С++. Вывести все четные буквы слова C++
C++ Даны два слова. Напечатать только те буквы слов, которые есть только в одном из них

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
04.05.2012, 21:29     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #20
Цитата Сообщение от димарик Посмотреть сообщение
ну я делаю так создал папку в ней сохранил файл проджект там создал два файла input и output дальше написал в файле in
mama
papa
babushka
Так в файле in написал или в файле input?
Цитата Сообщение от димарик Посмотреть сообщение
не знаю что такое(
а как вы делаете мошь я не так
Откомпилируй код из этого поста и сделай то, что написано здесь. После этого отпишись, что было выведено в консоль.
Yandex
Объявления
04.05.2012, 21:29     Даны три слова.Напечатать их общие буквы (из паскаля в с++)
Ответ Создать тему
Опции темы

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