Насколько я знаю, разница между for
петлей и while
циклом выглядит следующим образом:цикла WHILE показывает другой выход, чем для цикла
для:
кулака инициализация происходит, то условное выражение проверяется и если это приводит к TRUE
, тогда выполняется только эта часть инструкции, этот цикл является непрерывным до результатов условного выражения FALSE
.
Хотя:
условное выражение проверяется первым, и если результат TRUE
то заявление часть запускается на выполнение в противном случае нет, этот цикл непрерывно до условное выражение результатов FALSE
.
Сегодня я написал алгоритм, который Проверяется string
Повторяющиеся, и если это так, чтобы печатать только те, которые не являются:
#include<stdio.h>
#include<string.h>
int main(void){
const char *str = "Mississippi";
char tmp[15] = {0};
size_t i=0,j=0,k=1;
int found=0;
tmp[0] = str[0];
printf("Before = %s\n",str);
while(str[i] != '\0'){
for(j=0;tmp[j] != '\0';j++){
if(tmp[j] == str[i]){
found++;
}
}
if(found==0){
tmp[k]=str[i];
k++;
}
found=0;
i++;
}
tmp[strlen(tmp)] = '\0';
printf("After = %s\n",tmp);
return 0;
}
Выход:
Before = Mississippi
After = Misp
Теперь смотрите что произойдет, если заменить петлю for
:
for(j=0;tmp[j] != '\0';j++){
if(tmp[j] == str[i]){
found++;
}
}
С `время цикла:
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
я получаю:
#include<stdio.h>
#include<string.h>
int main(void){
const char *str = "Mississippi";
char tmp[15] = {0};
size_t i=0,j=0,k=1;
int found=0;
tmp[0] = str[0];
printf("Before = %s\n",str);
while(str[i] != '\0'){
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
if(found==0){
tmp[k]=str[i];
k++;
}
found=0;
i++;
}
tmp[strlen(tmp)] = '\0';
printf("After = %s\n",tmp);
return 0;
}
Но выход не как ожидалось:
Before = Mississippi
After = Misp
Но:
Before = Mississippi
After = Misisipi
Почему это происходит?
TLDR; пожалуйста, предоставьте короткий и сладкий [MCVE] (http://stackoverflow.com/help/mcve), который иллюстрирует проблему. Не отправляйте код, который работает. –
@WeatherVane Извините, что удалил часть с примером. – Michi
Down Voter Пожалуйста, объясните, почему? Есть ли шанс увидеть, кто проголосовал за меня? – Michi