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

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

Войти
Регистрация
Восстановить пароль
 
 
дарт вейдер
5 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 92
#1

два слова А и В - C++

12.06.2013, 22:17. Просмотров 550. Ответов 17
Метки нет (Все метки)

составить алгоритм
даны два слова А и В. проверить можно ли с букв, входящих в слово А, составить слова В.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 22:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос два слова А и В (C++):

Дано предложение, где два слова различны. Найти эти слова - C++
var mas:arrayof string; i,j,k:integer; w,s:string; begin writeln('Введите строку'); readln(s); k:=0; s:=s+' '; for i:=1 to...

Дано предложение. В нем только два слова одинаковые. Найти эти слова - C++
Дано предложение. В нем только два слова одинаковые. Найти эти слова. Заранее спасибо

Ввести строку и два слова, заменить все вхождения первого слова на второе - C++
Возможно ли создание такой программы: Ввести строку и два слова, заменить все вхождения первого слова на второе.

Из заданного слова сформировать два новых слова - C++
Возникла проблема, при ознакомлении с С++. Стоит задача: из заданного слова сформировать два новых слова: в первое записать символы, что...

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

Дано два предложения (Распечатать слова из первого предложения, который начинаются на первую букву последнего слова второго предложения) - C++
Дано два предложения. Распечатать: - слова из первого предложения, который начинаются на первую букву последнего слова второго...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
13.06.2013, 17:28 #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
#include <iostream>
#include <string>
#include <map>
 
int main()
{
   std::cout << "input two words: ";
   std::string A, B;
   std::cin >> A >> B;
 
   std::map<char, int> chars;
 
   for (size_t i = 0; i < A.size(); ++i)
   {
      chars[A[i]]++;
   }
 
   for (size_t i = 0; i < B.size(); ++i)
   {
      chars[B[i]]--;
   }
 
   bool ok = true;
   std::map<char, int>::iterator it;
   for (it = chars.begin(); (it != chars.end()) && ok; ++it)
   {
      ok = (it->second >= 0);
   }
 
   std::cout << (ok ? "yes" : "no") << std::endl;
 
   return 0;
}
два слова А и В
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.06.2013, 17:42 #3
C++
1
2
3
4
5
6
7
8
9
int Check(char *s, char *t)
{
   int count[256] = {0}, i;
   for(; *s; ++s)
      ++count[*s];
   for(; *t && --count[*t] >= 0; ++t)
      ;
   return !(*t);
}
дарт вейдер
5 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 92
13.06.2013, 18:07  [ТС] #4
спасибо, класно получилось,))))))
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 03:48 #5
Thinker, в вашем алгоритме есть потенциальный баг. Т.к. char является знаковым, то в случае с использованием кириллицы ваш код будет не корректным и вызовет segmentation fault
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.06.2013, 08:58 #6
это понятно, ориентируюсь на латиницу.
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 09:39 #7
Цитата Сообщение от Thinker Посмотреть сообщение
это понятно, ориентируюсь на латиницу.
Хотя тут скорее не segmentation fault, а undefined behavior
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 10:46 #8
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
#include <iostream>
#include <string>
#include <algorithm>
 
bool check(std::string first, std::string two);
 
int main()
{
    std::cout << "Enter string: ";
 
    std::string first, two;
    std::cin >> first >> two;
 
    std::cout << (check(first, two) ? "True" : "False") << std::endl;
 
    return 0;
}
 
bool check(std::string first, std::string two)
{
    std::sort(first.begin(), first.end());
    std::sort(two.begin(), two.end());
 
    return first == two ? true : false;
}
Добавлено через 39 секунд
Также работает и для кириллицы.

Добавлено через 14 минут
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
#include <iostream>
#include <string>
#include <algorithm>
 
bool check(std::string first, std::string two);
 
int main()
{
    std::cout << "Enter string: ";
 
    std::string first, two;
    std::cin >> first >> two;
 
    std::cout << (check(first, two) ? "True" : "False") << std::endl;
 
    return 0;
}
 
bool check(std::string first, std::string two)
{
    std::sort(first.begin(), first.end());
    std::sort(two.begin(), two.end());
 
    if(two.length() < first.length())
        return false;
    else if(first == two)
        return true;
    else
        for(size_t i = 0; i < first.length(); ++i)
            if(first.at(i) != two.at(i))
                return false;
    
    return true;
}
Работает с разным кол-во букв.
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 10:46 #9
GetVariable, да, но никто не говорит что наборы должны совпадать. Т.е. из слова hello можно составить слово lol.
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 10:49 #10
Цитата Сообщение от anmartex Посмотреть сообщение
GetVariable, да, но никто не говорит что наборы должны совпадать. Т.е. из слова hallo можно составить слово all.
Действительно, секундочку.
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 10:51 #11
Работает с разным кол-во букв.
Нет
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 11:12 #12
сейчас.

Добавлено через 17 минут
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 <string>
#include <algorithm>
 
bool check(std::string first, std::string two);
 
int main()
{
    std::cout << "Enter string: ";
 
    std::string first, two;
    std::cin >> first >> two;
 
    std::cout << (check(first, two) ? "True" : "False") << std::endl;
 
    return 0;
}
 
bool check(std::string first, std::string two)
{
    for(size_t i = 0; i < first.length(); ++i)
        if(two.find(first.at(i)) == std::string::npos)
            return false;
    else
        two[i] = '0'; //black magic.
 
    return true;
}
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 11:22 #13
Опять мимо
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 11:29 #14
http://codepad.org/9NQYm5I0
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 <string>
#include <algorithm>
 
bool check(std::string first, std::string two);
 
int main()
{
    std::cout << "Enter string: ";
 
    std::string first, two;
    std::cin >> first >> two;
 
    std::cout << (check(first, two) ? "True" : "False") << std::endl;
 
    return 0;
}
 
bool check(std::string first, std::string two)
{
    for(size_t i = 0; i < two.length(); ++i)
        if(first.find(two.at(i)) == std::string::npos)
            return false;
    else
        first[i] = '0'; //black magic.
 
    return true;
}
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 11:40 #15
Снова мимо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 11:40
Привет! Вот еще темы с ответами:

Даны два слова - C++
Поможете?) Даны два слова, напечатать только те символы, которые встречаются в обоих словах одновременно. Например, для слов процессор...

Даны два слова - C++
Даны два слова.Определить сколько начальных букв первого слова совпадает с начальными буквами второго слова.Рассмотреть 2 случая....

Переставить два слова местами - C++
Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами. Результат запишите в строку и выведите...

Как сравнить два слова - C++
как сравнить два слова в массиве структур ? // masS.stud=go_23 // // masS.stud=go_23 // ... if(masS.stud==masS.stud) //...


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

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

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