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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
#1

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

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

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++ Даны два слова.Вывести все общие буквы этих слов по одному разу. - C++
Например, если заданы слова «процессор» и «информация», то ответом должно быть: «р о ц»

Даны два слова. Напечатать неповторяющиеся буквы - C++
Даны два слова. Напечатать неповторяющиеся буквы. Str1 – первое слово, Str2 – второе слово Str, S – слова, содержащие все...

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

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

Из паскаля в С++. Вывести все четные буквы слова - C++
var a:integer; var s1,s2:string; begin inc(a); write('Vvedite slovo: '); readln(s1); repeat s2:=s2+s1; ...

Напечатать все слова, входящие в эту текстовую строку, заканчивающиеся на буквы заданного слова (например, abcdab, ab, kab) - C++
Доброго времени суток, форумчане. Надеюсь на вашу помощь. Через неделю сессия, а мне к ней осталось доделать 4 задачи по практике, которые...

Даны три слова. Определить палиндромы - C++
Буду очень благодарен если поможете переделать задачку :) Вот код похожей задачи только с числами... #include <iostream> #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
03.05.2012, 23:14     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #14
Цитата Сообщение от димарик Посмотреть сообщение
ошибку никакую не выводит,в входной файл пишу
папа
мама
бабушка
а в выходном ничего не пишет
В какой кодировке сохранён текстовый файл?
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 23:22  [ТС]     Даны три слова.Напечатать их общие буквы (из паскаля в с++) #15
В кодировке ANSI
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
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     Даны три слова.Напечатать их общие буквы (из паскаля в с++)
Еще ссылки по теме:

Даны два слова, в каждом из которых от 1 до 8 строчных латинских букв и за каждым из которых - пробел. Напечатать слова в алфавитном порядке - C++
Даны два различных слова, в каждом из которых от 1 до 8 строчных латинских букв и за каждым из которых - пробел. Напечатать эти слова в...

Вывести на экран слова, содержащие три буквы - C++
Дана строка, содержащая текст, заканчивающаяся точкой. Вывести на экран слова, содержащие три буквы. Задача на строки.

Вывести на экран слова, содержащие три буквы. - C++
Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран слова, содержащие три буквы.

Вывести на экран слова, содержащие три буквы - C++
Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран слова, содержащие три буквы.

Даны три слова. Определить, является ли хоть одно из них палиндромом - C++
Даны три слова. Определить, является ли хоть одно из них палиндромом (&quot;перевёртышем&quot;), т.е таким, которое читается одинаково слева направо...


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

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

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