Рейтинг:
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::епси;
}
в моей программе?
[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
Короткий ответ: не надо.
Как я уже говорил ранее, подумайте о том, что вам нужно сделать, и используйте ручку и бумагу, чтобы выработать необходимые шаги. Простое копирование чужого кода без полного понимания того, что он делает, приведет к еще большим проблемам.