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

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

Восстановить пароль Регистрация
 
дарт вейдер
 Аватар для дарт вейдер
5 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 92
12.06.2013, 22:17     два слова А и В #1
составить алгоритм
даны два слова А и В. проверить можно ли с букв, входящих в слово А, составить слова В.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 22:17     два слова А и В
Посмотрите здесь:

Ввести строку и два слова, заменить все вхождения первого слова на второе C++
C++ Даны два слова
C++ Сравнить два введённых слова
C++ Даны два слова, в каждом из которых от 1 до 8 строчных латинских букв и за каждым из которых - пробел. Напечатать слова в алфавитном порядке
Дано два предложения (Распечатать слова из первого предложения, который начинаются на первую букву последнего слова второго предложения) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 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++
 Аватар для Thinker
4215 / 2189 / 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
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 03:48     два слова А и В #5
Thinker, в вашем алгоритме есть потенциальный баг. Т.к. char является знаковым, то в случае с использованием кириллицы ваш код будет не корректным и вызовет segmentation fault
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.06.2013, 08:58     два слова А и В #6
это понятно, ориентируюсь на латиницу.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 09:39     два слова А и В #7
Цитата Сообщение от Thinker Посмотреть сообщение
это понятно, ориентируюсь на латиницу.
Хотя тут скорее не segmentation fault, а undefined behavior
GetVariable
 Аватар для 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
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 10:46     два слова А и В #9
GetVariable, да, но никто не говорит что наборы должны совпадать. Т.е. из слова hello можно составить слово lol.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 10:49     два слова А и В #10
Цитата Сообщение от anmartex Посмотреть сообщение
GetVariable, да, но никто не говорит что наборы должны совпадать. Т.е. из слова hallo можно составить слово all.
Действительно, секундочку.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 10:51     два слова А и В #11
Работает с разным кол-во букв.
Нет
GetVariable
 Аватар для 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
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 11:22     два слова А и В #13
Опять мимо
GetVariable
 Аватар для 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
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 11:40     два слова А и В #15
Снова мимо
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 11:47     два слова А и В #16
=
Добавлено через 5 минут
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
#include <iostream>
#include <string>
 
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[first.find(two.at(i))] = '0'; //black magic.
 
    return true;
}
Добавлено через 1 минуту
http://codepad.org/EINW5GC0
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.06.2013, 11:51     два слова А и В #17
GetVariable, а не расточительно ли два раза поиск делать за одну итерацию?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 11:54     два слова А и В
Еще ссылки по теме:

C++ Даны два слова
C++ Дано предложение. В нем только два слова одинаковые. Найти эти слова
C++ Дано предложение, где два слова различны. Найти эти слова

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

Или воспользуйтесь поиском по форуму:
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 11:54     два слова А и В #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool check(std::string first, std::string two)
{
    size_t found;
 
    for(size_t i = 0; i < two.length(); ++i)
    {
        found = first.find(two.at(i));
 
        if(found == std::string::npos)
            return false;
        else
            first[found] = '0'; //black magic.
    }
    return true;
}
Yandex
Объявления
14.06.2013, 11:54     два слова А и В
Ответ Создать тему
Опции темы

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