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

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

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

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

Добавлено через 19 часов 49 минут
Хотя бы в двух словах объясните решение этой задачи.
http://www.cyberforum.ru/cpp-beginners/thread1067336.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2015, 23:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получить из слова А, вычеркиванием некоторого количества букв, слово Б (C++):

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

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

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

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>)
Помогите плз...лучше с пояснениями

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

Из слова апельсин путем "вырезок" и "склеек" его букв получить слово спаниель
Задача из сборника Златопольского: 9.30. Из слово апельсин путем &quot;вырезок&quot; и...

Дано слово а. Получить слово b, образованное нечётными буквами слова а.
8.1.2. Помогите, пожалуйста, решить задачу в С++. Дано слово а. Получить...


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

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

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