User 14681012 Ответов: 2

Как создать программу, которая соответствует букве и цифре в C++


Привет, я пытаюсь создать одну программу, но никак не могу ее сделать. Две строки в первой строке кода являются строками, а три цифры во второй строке кода вводятся в программу. Подобный этому:
слово + other_word = other_other_word
1254 + 5471 = 81755
Если я могу заменить каждое число каждой буквой так, чтобы не было букв, соответствующих двум числам, программа должна напечатать "да", а если это невозможно, то они должны напечатать "нет".
Можете ли вы помочь мне сделать это на c++?

Что я уже пробовал:

Я пытался сделать эту программу, но не могу.

Patrice T

Добавьте результат письма к вашему примеру.
и покажите свою работу, и объясните проблему.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Этот код построит вам таблицу перевода, чтобы соответствовать буквам и цифрам. Затем вы можете использовать число (преобразованное в: int i = number - '0' - 1), чтобы получить правильную букву для будущих входных строк.

std::string letters = "bludsnake";
std::string numbers = "956324718";
std::string table = "";
table.append(letters.length(), ' ');

for (int i = 0; i < letters.length(); ++i)
{
    char c = letters[i];
    int index = numbers[i] - '0';
    table[index - 1] = c;
}


[no name]

ОК. Но у меня уже есть цифры, предлагаемые ниже буквы, чтобы проверить, что одно и то же число соответствует одной и той же букве. Как я могу сделать эту функцию?

Richard MacCutchan

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

[no name]

ОК. Большое вам спасибо, но я не понимаю, что делает ваша программа?

Richard MacCutchan

Он создает таблицу поиска из двух входных данных. Затем вы можете найти букву, соответствующую каждой цифре, следующим образом:

char number = // the next number in a set
int index = number - '0';
char matchingLetter = table[index - 1]; // so 9 would return b, 5 would return l etc.

[no name]

Но что, если число больше длины строки?
Например 8751 для струнного книги, гравюры:



к

Richard MacCutchan

Ну, это на самом деле не работает, так как 7 и 5 оба установлены на "о". Я подозреваю, что мои предложения на самом деле не то, что вы ищете.

[no name]

Итак, как я могу решить эту проблему?

Рейтинг:
1

Richard MacCutchan

Да, мы можем помочь, но мы не собираемся делать все это для вас. Сначала вам нужно показать, что вы сделали до сих пор, и объяснить, где именно вы застряли. Как бы то ни было, в вашем вопросе недостаточно информации, чтобы знать, какие критерии вы используете для замены цифры буквой.


[no name]

Я использую вектор vector<int, char="">. Но я не умею сравнивать векторы. Например, как найти, есть ли числа, соответствующие двум разным буквам, или есть ли буквы, соответствующие двум разным числам.

Richard MacCutchan

Извините, я не совсем понимаю, что вы имеете в виду. Если вы знаете, какой символ представляет какую цифру, то простого массива будет достаточно. Например, если цифры от 1 до 9 представлены ABCDEFGHI, то это будет сделано примерно следующим образом:

char digtoltr[] = "0ABCDEFGHI";
char number = getc(); // get the next digit as a character
int index = number - '0'; // make it an integer value
char letter = digtoltr[index]; // get the letter that corresponds to this number

[no name]

Мне удалось это сделать, но я не знаю, как продолжать, пожалуйста, помогите:
#include <iostream>
#include <string>
#include <stdlib.h>
использование пространства имен std;

тап_п()
{
строка первая, вторая, третья, some_string;
строка first_number, second_number, third_number;
Гэтлину(Кин, во-первых, ' ');
Гэтлину(Кин, some_string, ' ');
Гэтлину(Кин, во-вторых, ' ');
Гэтлину(Кин, some_string, ' ');
getline(cin, третий);

Гэтлину(Кин, first_number, ' ');
Гэтлину(Кин, some_string, ' ');
Гэтлину(Кин, second_number, ' ');
Гэтлину(Кин, some_string, ' ');
Гэтлину(Кин, third_number);

инт число1 =Атой(first_number.c_str());
инт число2 = Атой(second_number.c_str());
инт число3 = Атой(third_number.c_str());
возвращает 0;
}

[no name]

Спасибо, но я не знаю, как соотнести букву с цифрой. Если у меня есть строка STOP и int 1234; как я должен соответствовать букве S номеру 1 и всем остальным?

[no name]

Мне удалось это сделать, но я не знаю, как продолжать, с чего начать:
#include <iostream>
#include <string>
#include <stdlib.h>
использование пространства имен std;

тап_п()
{
строка первая, вторая, третья, some_string;
строка first_number, second_number, third_number;
Гэтлину(Кин, во-первых, ' ');
Гэтлину(Кин, some_string, ' ');
Гэтлину(Кин, во-вторых, ' ');
Гэтлину(Кин, some_string, ' ');
getline(cin, третий);

Гэтлину(Кин, first_number, ' ');
Гэтлину(Кин, some_string, ' ');
Гэтлину(Кин, second_number, ' ');
Гэтлину(Кин, some_string, ' ');
Гэтлину(Кин, third_number);

инт число1 =Атой(first_number.c_str());
инт число2 = Атой(second_number.c_str());
инт число3 = Атой(third_number.c_str());
возвращает 0;
}

Richard MacCutchan

Если Вы читаете два поля вместе, которые представляют все символы и цифры, то следующий код сделает это. NB я закодировал две примерные строки только для того чтобы этот код работал:

std::string foo = "bludsnake";
std::string number = "956324718";

for each (char c in number)
{
int i = c - '0';
std::cout << "number: " << c << " = letter: " << foo[i - 1] << std::endl;
}

[no name]

Я все еще не понимаю, как я могу соотнести первую букву с первым числом, вторую букву со вторым числом... в моей программе?

Richard MacCutchan

Выберите первую букву и первую цифру. Преобразуйте число в целочисленное значение, как я показал, и сохраните букву в этой позиции массива. Затем, когда вы используете номер позже, он должен выбрать правильную букву.

[no name]

Спасибо, но как я могу проверить, есть ли 2 разных числа, которые соответствуют одной и той же букве, или 2 разных буквы, соответствующие одному и тому же номеру?

Richard MacCutchan

Вам нужно посмотреть на каждое число по порядку и посмотреть, было ли оно уже объявлено, и сделать то же самое с буквами.

Но вы должны начать думать о проблеме, прежде чем писать какой-либо код. Напишите несколько примеров строк на бумаге и подумайте, как бы вы подошли к каждой части проблемы, чтобы решить ее. Запишите основные шаги и сделайте несколько пробных прохождений. Как только вы это четко осознаете, вы можете начать превращать эти шаги в реальный код.

[no name]

Я пишу ошибку, когда набираю "для каждого". Почему?

[no name]

Как я могу вставить ваш код:
std::string foo = "bludsnake";
std::string number = "956324718";

для каждого персонажа ("C" в количестве)
{
int i = c - '0';
с std::соиь <&ЛТ; "число:" &ЛТ;&ЛТ; п &ЛТ;&ЛТ; "= письмо: "&ЛТ;&ЛТ; фу[я - 1] &ЛТ;&ЛТ; функция std::епси;
}
в моей программе?

Richard MacCutchan

Извините за мою ошибку, это старомодный способ, вы должны использовать диапазон, основанный на заявлении:
for (char c : number)
Видеть Range-based for Statement (C++) | Microsoft Docs[^].

[no name]

Я запускаю эту программу но она пишет:
число: 9 = буква: е
число: 5 = буква: s
число: 6 = буква: n
число: 3 = буква: u
число: 2 = буква: l
число: 4 = буква: d
число: 7 = буква: А
число: 1 = буква: b
число: 8 = буква: k
но string-это bludsnake, а int-956324718, и он записывает 9 = e. Почему он не пишет 9 = b? 9-это первое число, А b-первая буква.

Richard MacCutchan

Смотрите мое решение ниже.

Richard MacCutchan

Короткий ответ: не надо.
Как я уже говорил ранее, подумайте о том, что вам нужно сделать, и используйте ручку и бумагу, чтобы выработать необходимые шаги. Простое копирование чужого кода без полного понимания того, что он делает, приведет к еще большим проблемам.