Я ожидаю, что «матч!» когда хвост n2
совпадает с хвостом n1
, в противном случае «не совпадают!». Пример «матч!»: n1 = 123456
и n2 = 3456
.Странный результат с строками C
Проблема в том, что я ввожу, например, n1 = "45"
и n2 = "645"
. Он не должен совпадать, но результат «match!».
bool different_tail = false;
char n1[11], n2[11];
cin >> n1 >> n2;
for(int i = strlen(n1)-strlen(n2); i < strlen(n1); i++){
if(i < 0 || n1[i] != n2[i-(strlen(n1)-strlen(n2))]){
different_tail = true;
break;
}
}
if(different_tail)
cout << "does not match!" << endl;
else
cout << "match!" << endl;
Я не хочу использовать другие пути решения проблемы (например, STRCMP, и т.д ...), я хочу, чтобы понять, что происходит.
Похоже, вам, возможно, потребуется научиться использовать отладчик для перехода по вашему коду. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Nathan, strlen (n1) -strlen (n1) -strlen n2) равно -1, а «for» не выполняется ... Я не знаю, почему. И я не могу отлаживать ничто другое, чтобы знать об этом. – WithoutNameZin