gpt4 book ai didi

c - WHILE 循环显示与 FOR 循环不同的输出

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:26 24 4
gpt4 key购买 nike

据我所知,for 循环和 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 循环:

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

为什么会这样?

最佳答案

缺少的是 for 循环在第一次进入时将 j 初始化为 0。

虽然 j 在声明时被初始化为 0,但是 while 循环是在另一个 while 循环中调用的,所以它不会得到每次都重新初始化。

添加初始化:

    j=0;
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}

你得到:

Before = Mississippi
After = Misp

关于c - WHILE 循环显示与 FOR 循环不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34051402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com