Мне нужен код для сравнения двух строк: word
и ptw
. Обе строки содержат только одно слово, имеют одинаковую длину и одинаковый регистр. Код должен проверить первый символ обоих слов и посмотреть, совпадают ли они, и он будет делать это до конца слова. Затем он выведет количество совпадающих букв (мне не нужно знать совпадающие буквы).
Пример: если word
равно windows
, а ptw
равно winowes
, должно выводиться 4
, поскольку w
, i
, n
и s
совпадают.
Я пробовал следующее, однако он не проверяет позиции:
string matchingletters(string word, string ptw) {
string result = "";
sort(begin(word), end(word));
sort(begin(ptw), end(ptw));
std::string intersection;
std::set_intersection(begin(word), end(word), begin(ptw), end(ptw),
back_inserter(intersection));
string mlr = to_string(intersection.length());
result = mlr + result;
cout << result << endl;
return result;
}
Результат, который это дает, когда word
есть kanton
, а ptw
есть balkon
есть 4
.
Он считается k
, хотя k
находится в 0
позиции в слове и 3
позиции в ptw, поэтому они не находятся в одной и той же позиции и не должны учитываться.
@ozanesici: Aseroids With Wings означает, что вам нужно указать, что вы пробовали и на чем застряли. Вы должны прочитать Как задать хороший вопрос (Справочный центр Stack Overflow).
Я просто хочу узнать более правильный способ сделать это, и, поскольку я не смог найти никаких других после того, как посмотрел его и попробовал самостоятельно, я разместил его здесь.
Я отредактировал сообщение с тем, что я пробовал.
@LakshyaRaj Я ценю предупреждения и не тороплюсь со мной, поскольку я новичок на сайте.
Что вы подразумеваете под "он не проверяет позиции"? Дайте полную информацию о вашей проблеме.
Я отредактировал пост с примером запуска @AsteroidsWithWings
Я не понимаю, как ваш код относится к заявленной проблеме. Вы должны проверять соответствие символов «в одних и тех же местах», но вы сортируете оба ввода в самом начале своего алгоритма, немедленно теряя эти позиции. Я предлагаю вам решить задачу с помощью карандаша и бумаги.
@ozanesici : Будут ли два слова одинаковой длины?
да @LakshyaRaj
Теперь я вижу свою ошибку @AsteroidsWithWings
Предполагая, что два слова имеют одинаковую длину, и, поскольку вам все равно, какие буквы совпадают, вы можете просто перебирать и подсчитывать совпадающие символы.
unsigned matchingletters(const std::string& word, const std::string& ptw) {
assert(word.size() == ptw.size());
unsigned count{0};
for (size_t i = 0; i < word.size(); ++i) {
if (word[i] == ptw[i])
count++;
}
return count;
}
1. Не домашняя работа 2. Я уже знаю, что могу сравнивать по одному, но мне нужна более упрощенная версия, возможно, с использованием итераторов 3. Это функция моего кода.