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

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

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

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

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

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

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

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

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

Даны три слова - "мама", "мыла", "раму". Задача - напечатать всевозможные варианты построения слов - C++
Я записал код, однако эту часть надо автоматизировать, поможете? КОД: } #include <iostream> using namespace std; int main()...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Drinker
3 / 3 / 3
Регистрация: 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
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
03.05.2012, 23:14 #14
Цитата Сообщение от димарик Посмотреть сообщение
ошибку никакую не выводит,в входной файл пишу
папа
мама
бабушка
а в выходном ничего не пишет
В какой кодировке сохранён текстовый файл?
0
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
03.05.2012, 23:22  [ТС] #15
В кодировке ANSI
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 23:22
Привет! Вот еще темы с ответами:

Из паскаля в С++. Вывести все четные буквы слова - 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 &lt;iostream&gt; #include...

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


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

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

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