我正在为函数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]开始横切输入字符串中的所有字符。为什么会有输出差异?谢谢。
答案 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;
}