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

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

Войти
Регистрация
Восстановить пароль
 
ErickZaltman
Сообщений: n/a
#1

Даны две символьные строки. - C++

21.02.2011, 21:24. Просмотров 667. Ответов 6
Метки нет (Все метки)

Даны две символьные строки. Проверить, можно ли получить вторую строку из первой, удалением некоторых её символов.

Люди добрые, будьте добры, помогите с алгоритмом.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2011, 21:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Даны две символьные строки. (C++):

Даны две символьные строки А и В - C++
Даны две символьные строки А и В. Составьте программу, проверяющую, можно ли из букв, входящих в А, составить В. буквы можно переставлять и...

Даны две символьные строки, состоящие только из цифр - C++
Подскажите пожалуйста! Borland C++ Даны две символьные строки, состоящие только из цифр (длина каждой - более 10 символов). Считая,...

Заданы две символьные строки. Все ли буквы первого слова встречаются во втором - C++
проблема вот с этим "Все ли буквы первого слова встречаются во втором." не могу организовать цикл мозгов не хватает)) однокурсник пытался...

Даны две строки: S и S0. Определить количество вхождений строки S0 в строку S - C++
Даны две строки: S и S0. Определить количество вхождений строки S0 в строку S.

c++ Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1. - C++
Очень надеюсь на помощь

Даны две строки. Получить строку, в которой чередуются слова первой и второй строки - C++
Даны две строки. Получить строку, в которой чередуются слова первой и второй строки. Если в одной из строк число слов больше, чем в...

6
dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
21.02.2011, 21:52 #2
Если использовать для представления строк класс string, то у него есть функция find(іstring st), если строка st найдена, то возращается индекс начальной позиции этой строки.
C++
1
2
string main_string("The value of pi is...");
int pos=main_string.find("value");
Если строка не найдена, то возращается константа string::npos, определенная в классе string.
1
DAgot_
22 / 22 / 1
Регистрация: 03.01.2010
Сообщений: 68
21.02.2011, 21:56 #3
Берём первый символ второй строки и сравниваем со всеми символами первой строки.

Когда находим совпадение, сравниваем второй символ второй строки со всеми символами первой строки, которые стоят после найденого совпадения.

Когда находим совпадение сравниваем третий элемент второй строки со всеми элементами первой строки, которые стоят после найденного нами второго совпадения.

И т.д.

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

Если по окончании работы цикла сравнения строк значение этой переменной равно длине второй строки, то получаем положительный ответ.

Добавлено через 2 минуты
dyosick, насколько я понял условие, предложенный вами вариант не проканает.

Например:

Строка 1: batabtab
Строка 2: atata

Отсюда видно, что вторая b не даст найти вторую строку.
1
dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
21.02.2011, 22:21 #4
DAgot_, с Вашим замечанием полностью согласен. Невнимательно прочитал задание
1
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
21.02.2011, 22:26 #5
test
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<stdio.h>
 
int main(){
    char a[BUFSIZ], b[BUFSIZ], *pa=a, *pb=b;
    puts("First string:");
    gets(a);
    puts("Second string:");
    gets(b);
    for(; *pa; ++pa, ++pb){
        while(*pa!=*pb){
            ++pa;
            if(*pa==0&&*pb!=0){
                puts("No\n");
                return 0;
            }
            if(*pa==0&&*pb==0){
                puts("Yes\n");
                return 0;
            }
        }
    }
    if(*pb==0) puts("Yes\n");
    else puts("No");
    return 0;
}
1
dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
21.02.2011, 22:35 #6
Тогда если использовать предложенный алгоритм, то
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 <string>
 
using namespace std;
 
int main()
{
string main_st("batabtab");
string sub_st("atata");
int count=sub_st.length();
 
for(int i=0;i<sub_st.length();i++)
   if(main_st.find(sub_st[i])!=string::npos)
      count--;
      
if(count==0)
   cout<<"You can modify main string in order to receive your substring!!!"<<endl;
else
   cout<<"Sorry, you can`t!"<<endl;      
        
system("pause");
return 0;       
}
1
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
21.02.2011, 22:47 #7
dyosick ,
C++
1
2
string main_st("at");
string sub_st("atata");
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2011, 22:47
Привет! Вот еще темы с ответами:

Даны две строки - C++
Даны две строки. Проверить, одинаковые ли у них вторые слова (например, «мама мыла раму» и «катя мыла синюю чашку» имеют одинаковые вторые...

Даны две строки символов S1 и S2 - C++
Будьте добры, как осуществить программу по такому вот запросу?Если можно, с комментариями пожалуйста Даны две строки символов S1 и S2....

Даны две строки длиной до 80 символов - C++
Даны две строки длиной до 80 символов. Необходимо: Удалить заданный символ в каждой строке. Описать в виде отдельной функции удаление...

Даны две строки, содержащие не более 100 символов. - C++
Строки состоят из слов, разделенных пробелами. Распечатать все слова из каждой строки, начинающиеся и заканчивающие-ся на заданную...


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

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

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