C中while循环和for循环之间的差异导致输出差异

时间:2020-11-07 07:27:15

标签: c

我正在为函数maxCharToFront()编写代码,该代码接受字符串str作为参数,从字符串中找到最大字符(基于ASCII值),并将其移至字符串。

主要功能:

#include <stdio.h>
#include <string.h>
void maxCharToFront(char *str);
int main()
{
   char str[80], *p;
   
   printf("Enter a string: \n");
   fgets(str, 80, stdin);
   if (p=strchr(str,'\n')) *p = '\0';
   printf("maxCharToFront(): ");
   maxCharToFront(str);
   puts(str);
   return 0;
}

这是使用for循环的功能:

void maxCharToFront(char *str)
{
    int i, maxcharint=0, maxindex=0;
    char maxchar;
    for (i=0; str[i] != '\0'; i++){
        
        if ( (int)str[i]> maxcharint){
            maxcharint = (int)str[i];
            maxindex = i;
        }
        i++;
    }
    
    for (i = maxindex-1; i>-1; i--){
        str[i+1]= str[i];
    }
    maxchar = maxcharint;
    str[0]= maxchar;
}

当我输入ab作为输入时,它会返回ab作为for循环的输出。

这是使用while循环的功能:

void maxCharToFront(char *str)
{
    int i=0, maxindex=0, maxcharint=0;
    char maxchar;
    while (str[i]!='\0'){
        if ((int)str[i]>maxcharint){
            maxindex = i;
            maxcharint = (int)str[i];
        }
        i++;
    }
    
    for(i=maxindex-1; i>-1; i--){
        str[i+1]=str[i];
    }
    maxchar = maxcharint;
    str[0] = maxchar;
} 

当我输入ab作为输入时,它会成功地将ba作为while循环的输出返回。

但是,我的while和for循环没有区别,因为这两个字符都从str [0]开始横切输入字符串中的所有字符。为什么会有输出差异?谢谢。

1 个答案:

答案 0 :(得分:1)

在for循环中,您将i递增两次,一次在for循环中,然后再在i++上重复

void maxCharToFront(char *str)
{
    int i, maxcharint=0, maxindex=0;
    char maxchar;
    for (i=0; str[i] != '\0'; i++/*increment here*/){
        
        if ( (int)str[i]> maxcharint){
            maxcharint = (int)str[i];
            maxindex = i;
        }
        i++; // increment twice
    }
    
    for (i = maxindex-1; i>-1; i--){
        str[i+1]= str[i];
    }
    maxchar = maxcharint;
    str[0]= maxchar;
}