Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2019, 19:18   #1
furymaxim
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 28
По умолчанию C++ Вывести символы, которые встречаются в обоих словах

Программа на Паскале:

Код:
Program str;
var
  a:string;
  b:string;
  
procedure proc(var m:string;var n:string);
var 
 s:string;
 res:string;
 Begin
  s:='';
  if length(m)>length(n) then //выбираем более короткую строку
   begin
    s:=m;
    m:=n;
    n:=s;
   end;
 for var i:=1 to length(m) do
    if pos(m[i],n)>0 then res:=res+a[i]; //если символ встретился, то записываем его в результирующую строку
  WriteLn(res);
 end;

 
begin
  Readln(a);
  Readln(b);
  proc(a,b);
end.
Хочу перевести на С++

Код:
#include <iostream>
#include <string.h>

using namespace std;

void sameSymbols(const char* a,const char* b)
{
    const char* s = nullptr;
    const char* res = nullptr;
    if ((unsigned)strlen(a) > (unsigned)strlen(b))
    {
        s = a;
        a = b;
        b = s;
    }

    for(int i = 1; i <= (unsigned)strlen(a); i++){
        if (strstr(a[i],b) != nullptr ){  //ошибка тут!
            res+=a[i];
        }
    }
    cout << res;


}

int main()
{
    char* a = new char;
    char* b = new char;
    cout << "Input string A: " << endl;
    cin >> a;
    cout << "Input string B: " << endl;
    cin >> b;
    sameSymbols(a,b);

Программа должна вывести символы, которые встречаются в обоих словах. Пример: Танк - аноним = ан
furymaxim вне форума Ответить с цитированием
Старый 23.03.2019, 19:27   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

char это один символ, а не строка
нумерация в массивах в С++ начинаетс с 0
p51x вне форума Ответить с цитированием
Старый 23.03.2019, 19:29   #3
furymaxim
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 28
По умолчанию

То есть тут вариант только использовать string, который доступен с подключением string.h?Думал, конечно, что можно как-то и без использования string сделать.. но тут тогда скорее всего char s [размерность] использовать придется
furymaxim вне форума Ответить с цитированием
Старый 23.03.2019, 19:43   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от furymaxim Посмотреть сообщение
То есть тут вариант только использовать string, который доступен с подключением string.h?
std::string в string

Цитата:
Сообщение от furymaxim Посмотреть сообщение
Думал, конечно, что можно как-то и без использования string сделать.. но тут тогда скорее всего char s [размерность] использовать придется
Можно. Вы же почти это сделали, но, естественно, в один символ строку не ввести.
p51x вне форума Ответить с цитированием
Старый 23.03.2019, 19:55   #5
furymaxim
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 28
По умолчанию

Спасибо.
furymaxim вне форума Ответить с цитированием
Старый 23.03.2019, 22:08   #6
furymaxim
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 28
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
std::string в string


Можно. Вы же почти это сделали, но, естественно, в один символ строку не ввести.
Код:
using namespace std;

void sameSymbols(string a, string b)
{
    string s;
    string res;

    s = ' ';

    if (a.size() > b.size())
    {
        s = a;
        a = b;
        b = s;
    }

    for(int i = 0; i <= a.size(); i++){
        if ( find(a[i],b) > 0){
            res+=a[i];
        }
    }
    cout << res;


}

int main()
{
    string a;
    string b;
    cout << "Input string A: " << endl;
    getline(cin,a);
    cout << "Input string B: " << endl;
    getline(cin,b);
    sameSymbols(a,b);

}
как поправить? find не применим к чару...
furymaxim вне форума Ответить с цитированием
Старый 24.03.2019, 06:43   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Поправьте границы цикла
2. У стрина есть свой файнд https://en.cppreference.com/w/cpp/st...ic_string/find
если хотите использовать общий https://en.cppreference.com/w/cpp/algorithm/find , то и параметры задавайте правильно.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один раз. EDWIN503 Общие вопросы по Java, Java SE, Kotlin 3 25.09.2017 03:37
Нужно найти буквы(т.е вывести на экран) которые встречаются в 2 или более словах. Gohych Паскаль, Turbo Pascal, PascalABC.NET 3 28.12.2016 11:02
Из предложения напечатать те символы, которые встречаются в нем ровно один раз nmr Помощь студентам 17 15.03.2014 13:46
из строки вывести на экран те символы, которые встречаются только по 1 разу Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 4 29.03.2011 19:08
В строке символов определить символы, которые встречаются по одному разу Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 12 27.03.2011 00:08