Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
1

Получить из слова А, вычеркиванием некоторого количества букв, слово Б

26.04.2015, 23:15. Просмотров 556. Ответов 14
Метки нет (Все метки)

Помогите решить задачу: "Получить из слова А, вычеркиванием некоторого количества букв, слово Б. Организовать простой диалог с пользователем для повторения работы программы. Выходные данные каждого цикла работы программы записать в отдельный файл". Не пойму как сделать вычеркивание. Оформить программу нужно для общего случая.

Добавлено через 19 часов 49 минут
Хотя бы в двух словах объясните решение этой задачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2015, 23:15
Ответы с готовыми решениями:

Проверьте, можно ли вычеркиванием букв из одного слова получить другое
Нужна помощь,заранее спасибо!!! Проверьте, можно ли вычеркиванием букв из...

Из слова строка путем замены его букв получить слово строфа
Из слова строка путем замены его букв получить слово строфа. Помогите с...

Из слова 'яблоко' путем 'вырезок' и 'склеек' его букв получить слово 'блок' и 'око'
из слово 'яблоко' путем 'вырезок' и 'склеек' его букв получить слово 'блок' и...

Найдите и замените вхождение некоторого слова на заданное пользователем слово
Найдите и замените вхождение некоторого слова на заданное пользователем слово ...

CHAR Найдите и замените вхождение некоторого слова на заданное пользователем слово
Найдите и замените вхождение некоторого слова на заданное пользователем слово....

14
DISTURB
19 / 19 / 14
Регистрация: 07.02.2015
Сообщений: 145
26.04.2015, 23:27 2
isobo531, постановка задачи не ясна. Слово Б известно изначально? Пример такого "вычеркивания" можете привести?
0
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
26.04.2015, 23:38 3
примерное решение
пользователь вводит слово Б
пользователь вводит слово А
цикл который проверяет если все буквы из слова Б в слове А
если нету то дальнейшие действия невозможны
вычеркивание:
цикл который который прочесывает все буквы слова А
{
цикл который проверяет есть ли такая буква в слове Б
если нет сдвигаем все символы после этой буквы на 1 влево тем самым удаляя этот символ
}
как то так
0
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
27.04.2015, 02:09  [ТС] 4
DISTURB, Это все, что известно по заданию.
0
DISTURB
19 / 19 / 14
Регистрация: 07.02.2015
Сообщений: 145
27.04.2015, 02:35 5
isobo531, уточняйте у своего преподавателя полные условия задачи. В данной трактовке решать ее можно совершенно по-разному.
Скажем, вот так:
C++
1
2
3
string word_A = "misunderstanding";
word_A.resize(3);
string word_B=word_A; // mis
0
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
27.04.2015, 16:19  [ТС] 6
DISTURB, Узнал. Будет два слова. Но нужно взять во внимание тот случай, если будет такое:
1) abc
2) dcaaaabc

Добавлено через 29 секунд
Iridiscent, Цикл вычеркивания в виде кода сделать сможете?
0
Lost_Eden
Заблокирован
27.04.2015, 16:25 7
ТС, у std::string есть функция find для твоих целей
0
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
27.04.2015, 18:24 8
isobo531,просто перемещаем все лишние в конец и вычеркиваем их всех разом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    setlocale(LC_ALL,"Rus");
char b[80]={"abce"};
char a[80]={"ksdakdjabjdfshjhfscasdae"};
int lena,lenb,aa=0,bb=0;
lena=strlen(a);
lenb=strlen(b);
 
cout<<"было: "<<a<<endl;
 
for(;(bb<lenb);aa++)
    {
   if(a[aa]==b[bb])
     {
         a[bb]=a[aa];bb++;
 
     }
}
a[lenb]='\0'; //удаляем остаток
cout<<"стало: "<<a<<endl;
}
1
Gr1f0nn
242 / 162 / 133
Регистрация: 30.09.2012
Сообщений: 690
27.04.2015, 19:17 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
int main()
{
    std::string word_1, word_2;
 
    std::cout << "Please, enter first word: " << "\n";
    std::cin >> word_1; // Слово, из которого будем получать второе слово
 
    std::cout << "Please, enter second word: " << "\n";
    std::cin >> word_2;
 
    for(std::string::iterator it = word_1.begin() ; it != word_1.end() ; ++it)
    {
        if(std::find(word_2.begin(), word_2.end(), *it) == word_2.end()) { word_1.erase(it); it = word_1.begin(); } // Если такой буквы нет в слове word_2, удаляем ее из word_1
        else while(std::count(word_1.begin(), word_1.end(), *it) > 1) { word_1.erase(it); it = word_1.begin(); } 
    }
 
    std::cout << "Result: " << word_1;
    return 0;
}
Добавлено через 11 минут
Проверку забыл добавить

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
int main()
{
    std::string word_1, word_2;
 
    std::cout << "Please, enter first word: " << "\n";
    std::cin >> word_1; // Слово, из которого будем получать второе слово
 
    std::cout << "Please, enter second word: " << "\n";
    std::cin >> word_2;
 
    for(std::string::iterator it = word_1.begin() ; it != word_1.end() ; ++it)
    {
        if(std::find(word_2.begin(), word_2.end(), *it) == word_2.end()) { word_1.erase(it); it = word_1.begin(); }
        else while(std::count(word_1.begin(), word_1.end(), *it) > 1) { word_1.erase(it); it = word_1.begin(); }
    }
 
    if(word_1 == word_2)
        std::cout << "Result: " << word_1;
    else std::cout << "It is impossible! >_<" << "\n";
    return 0;
}
Добавлено через 15 минут
Снова не так написал. Поправил:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
int main()
{
    std::string word_1, word_2;
 
    std::cout << "Please, enter first word: " << "\n";
    std::cin >> word_1; // Слово, из которого будем получать второе слово
 
    std::cout << "Please, enter second word: " << "\n";
    std::cin >> word_2;
 
    for(std::string::iterator it = word_1.begin() ; it != word_1.end() ; ++it)
    {
        if(std::find(word_2.begin(), word_2.end(), *it) == word_2.end()) { word_1.erase(it); it = word_1.begin(); }
        else while(std::count(word_1.begin(), word_1.end(), *it) > std::count(word_2.begin(), word_2.end(), *it)) { word_1.erase(it); it = word_1.begin(); }
    }
 
    if(word_1 == word_2)
        std::cout << "Result: " << word_1;
    else std::cout << "It is impossible! >_<" << "\n";
    return 0;
}
1
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
28.04.2015, 13:59  [ТС] 10
Iridiscent, Если я сделаю такой вариант слов, то результат выведет cat. Хотя буквы t нет в first_word..
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 <iostream>
using namespace std;
void main()
{
    setlocale (LC_ALL, "russian");
 
    char second_word [39] = {"cat"};
    char first_word [39] = {"ffffcgggggassssssllllll"};
    int lens, lenf, wf = 0, ws = 0;
 
    lenf = strlen (first_word);
    lens = strlen (second_word);
 
    cout << "Первое слово: "<< first_word << endl;
    cout << "Второе слово: " << second_word << endl;
 
    while (ws<lenf)
    {
            wf++;
       if (first_word[wf] == second_word[ws])
         {
             first_word[ws] = first_word[wf];
             ws++;
         }
    }
    first_word[lens] = '\0'; // удаляем остаток
 
    cout << "Результат: " << first_word << endl;
 
    system ("pause");
}
0
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
28.04.2015, 14:18 11
isobo531, поменяй свой цикл на
C++
1
2
3
4
5
6
7
8
9
10
  while (ws<lenf&&wf<lenf)
    {
            wf++;
       if (first_word[wf] == second_word[ws])
         {
             first_word[ws] = first_word[wf];
             ws++;
         }
    }
    first_word[ws] = '\0'; // удаляем остаток
0
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
28.04.2015, 15:58  [ТС] 12
Iridiscent, А если не хватает символа, может просто сообщение соответствующее вывести?
0
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
28.04.2015, 16:21 13
да, можно в принципе оставить прежний код и сделать проверку символов слова б в слове а

Добавлено через 7 минут
C++
1
2
3
4
5
6
int i=0,d;
for(d=0;d<strlen(a);d++)
if(a[d]==b[i])i++;
 
//проверка
if(  (i-1)<strlen(b)  )cout<<"ошибка";
0
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
28.04.2015, 17:19  [ТС] 14
Iridiscent, Как эту проверку объединить со всем кодом? Постоянно выводит слово ошибка
0
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
28.04.2015, 17:57 15
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
#include <vector>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <conio.h>
#include <ctime>
#include <iomanip>
 
using namespace std;
int main()
{
setlocale (LC_ALL, "russian");
 
    char second_word [39] = {"cat"};
    char first_word [39] = {"ffffcggaaaggaaagsasssssllllll"};
    int lens, lenf, wf = 0, ws = 0;
 
    lenf = strlen (first_word);
    lens = strlen (second_word);
int i=0,d;
for(d=0;d<lenf;d++)
if(second_word[i]==first_word[d]&&i<lenf)i++;
 
//проверка
if(  (i)!=lens  ){cout<<"ошибка"<<endl;return 0;}
 
 
    cout << "Первое слово: "<< first_word << endl;
    cout << "Второе слово: " << second_word << endl;
 
    while (ws<lenf)
    {
            wf++;
       if (first_word[wf] == second_word[ws])
         {
             first_word[ws] = first_word[wf];
             ws++;
         }
    }
    first_word[lens] = '\0'; // удаляем остаток
 
    cout << "Результат: " << first_word << endl;
 
    system ("pause");
}
0
28.04.2015, 17:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2015, 17:57

Ввести строку и слово. Вывести те слова, которые не содержат букв, входящих в слово.
Ребят помогите плииизз... только мне сказали через стандартную библиотеку ...

Ввести строку и слово. Вывести те слова, которые не содержат букв, входящих в слово (через <stdio.h>)
Помогите плз...лучше с пояснениями

Со слова процессор путем "вырезок" и "склеек" его букв получить слово рессор
При выполнении этой задачи разрешается использовать любые строчные типы данных...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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