Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача по С++, срочно W2

Дмитрий Висков Ученик (46), на голосовании 3 месяца назад
Чтобы обезопасить денежные средства своих клиентов, компания РусБанк пригласила Вас, как юного специалиста найти ошибку в их шифровальном алгоритме.
Ниже дана программа, которая шифрует номер банковской карты.

#include <iostream>

#include <string>



using namespace std;



string secureNum(string s) {

string t = "";

for (int i = 0; i < s.length(); i++)

{

if (s.length() > 3)

t += '*';

else

t += s[i];

}

return t;

}



int main() {

string s = "9875876509812";

cout << secureNum(s);



return 0;

}

Так, для строки, хранящейся в переменной s, алгоритм должен вывести результат «9875*********».


В указанном выше алгоритме допущена ошибка в одной строчке кода. Найдите и исправьте ее. В ответе укажите исправленную строку кода. Ответ записывайте без использования пробелов!

Правильным по форме, но не по содержанию является ответ вида:

while(a<5&&arr[i]>8)
Голосование за лучший ответ
Shady Ученик (120) 4 месяца назад
 if (s.length() > 3) – неправильная строчка 

вместо проверки длины переданной строки s, нужно проверять длину строки t:

if (t.length() > 3)
Дмитрий ВисковУченик (46) 4 месяца назад
Бинго
EvgenyМастер (1475) 4 месяца назад
>4?
Юма Куга Знаток (278) 4 месяца назад
Вместо «if (s.length() > 3)» должно быть «if(t.length()>3)» или «if(i>3)», но я думаю подразумевается первое
Инспектор Жопидý Оракул (86407) 4 месяца назад
Ошибка и её исправление
Ошибка заключается в строке:
C++
if (s.length() > 3)
t += '*';
else
t += s[i];
Объяснение:
• Алгоритм пытается зашифровать все символы, кроме последних 4.
• Проверка s.length() > 3 используется для определения, является ли номер карты достаточно длинным.
• Если номер карты короче 4 символов, то все символы шифруются звездочками (t += '*').
• Если номер карты содержит 4 или более символов, то последние 4 символа не шифруются (t += s[i]).
Проблема:
• Условие s.length() > 3 некорректное.
• Если номер карты точно равен 4 символам, то все символы будут зашифрованы звездочками, вместо того, чтобы оставить последние 4 символа без изменений.
Исправление:
Исправить ошибку можно, изменив условие проверки длины номера карты.
Варианты исправления:
1. Использовать оператор >=:
C++
if (s.length() >= 4)
t += '*';
else
t += s[i];
2. Использовать дополнительную проверку:
C++
if (s.length() > 4)
t += '*';
else
t += s[i];
Обе версии исправления корректны.
Важно:
• Выбор исправления может зависеть от стилистических предпочтений или от требований кодирования, принятых в компании РусБанк.
• Рекомендуется добавить комментарии к коду, чтобы объяснить, что делает код и почему были внесены изменения.
Исправленная строка кода (без пробелов):
C++
if (s.length() >= 4) t += '*'; else t += s[i];
Похожие вопросы