Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
6 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 92
1

два слова А и В

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

Author24 — интернет-сервис помощи студентам
составить алгоритм
даны два слова А и В. проверить можно ли с букв, входящих в слово А, составить слова В.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2013, 22:17
Ответы с готовыми решениями:

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

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

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

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

17
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
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;
}
два слова А и В
1
Эксперт С++
4267 / 2241 / 203
Регистрация: 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);
}
2
6 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 92
13.06.2013, 18:07  [ТС] 4
спасибо, класно получилось,))))))
0
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 03:48 5
Thinker, в вашем алгоритме есть потенциальный баг. Т.к. char является знаковым, то в случае с использованием кириллицы ваш код будет не корректным и вызовет segmentation fault
2
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.06.2013, 08:58 6
это понятно, ориентируюсь на латиницу.
1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 09:39 7
Цитата Сообщение от Thinker Посмотреть сообщение
это понятно, ориентируюсь на латиницу.
Хотя тут скорее не segmentation fault, а undefined behavior
0
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
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;
}
Работает с разным кол-во букв.
1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 10:46 9
GetVariable, да, но никто не говорит что наборы должны совпадать. Т.е. из слова hello можно составить слово lol.
1
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
14.06.2013, 10:49 10
Цитата Сообщение от anmartex Посмотреть сообщение
GetVariable, да, но никто не говорит что наборы должны совпадать. Т.е. из слова hallo можно составить слово all.
Действительно, секундочку.
0
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 10:51 11
Работает с разным кол-во букв.
Нет
1
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
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;
}
1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 11:22 13
Опять мимо
1
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
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;
}
1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 11:40 15
Снова мимо
1
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
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
1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.06.2013, 11:51 17
GetVariable, а не расточительно ли два раза поиск делать за одну итерацию?
1
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
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;
}
1
14.06.2013, 11:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2013, 11:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru