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

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

Восстановить пароль Регистрация
 
ErickZaltman
Сообщений: n/a
21.02.2011, 21:24     Даны две символьные строки. #1
Даны две символьные строки. Проверить, можно ли получить вторую строку из первой, удалением некоторых её символов.

Люди добрые, будьте добры, помогите с алгоритмом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dyosick
 Аватар для 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.
DAgot_
 Аватар для DAgot_
22 / 22 / 1
Регистрация: 03.01.2010
Сообщений: 68
21.02.2011, 21:56     Даны две символьные строки. #3
Берём первый символ второй строки и сравниваем со всеми символами первой строки.

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

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

И т.д.

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

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

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

Например:

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

Отсюда видно, что вторая b не даст найти вторую строку.
dyosick
 Аватар для dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
21.02.2011, 22:21     Даны две символьные строки. #4
DAgot_, с Вашим замечанием полностью согласен. Невнимательно прочитал задание
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
dyosick
 Аватар для 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;       
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2011, 22:47     Даны две символьные строки.
Еще ссылки по теме:

Даны две строки длиной до 80 символов C++
Даны две символьные строки А и В C++
C++ Заданы две символьные строки. Все ли буквы первого слова встречаются во втором

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
21.02.2011, 22:47     Даны две символьные строки. #7
dyosick ,
C++
1
2
string main_st("at");
string sub_st("atata");
Yandex
Объявления
21.02.2011, 22:47     Даны две символьные строки.
Ответ Создать тему
Опции темы

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