C-Program 判断不带'e' 或'E' 的char 数组中的最大子串

C-Program Determine the largest substring in a char array without 'e' or 'E'

我遇到了标题中所述的问题。这里有更多详细信息。

我的问题是:

a) 开发一个 C-function,它获取一个 char 数组作为输入参数,并在没有 'e' 'E' 的情况下确定此 char 数组中的最大子字符串。打印该子串的长度。

b)编写main函数来测试a)函数。使用 scanf("%[^\n]",...)getchar()

的循环

EX:输入:"you are one." .输出:"you ar" 长度:6

#include<stdio.h>
int main(){
char myStr[30],Str[30];
char ch;
int i = 0, j=0;
gets(myStr);


while(myStr[j] != '[=10=]'){  //Use this to determine any 'e' or 'E' inside the string
   if(myStr[j] == 'e' || myStr[j] == 'E'){
          j++;
          continue;
   } else{
          Str[i] = myStr[j];
          i++;
   }
   j++;
}
printf("%s  length:%d",Str,i--);
return 0;
}

回答表单的改进@ChartesL.:

#include<stdio.h>
int main(){
    char myStr[30];
    char *ptr;
    // read myStr from console
    ...
    char* delim = myStr;
    int longest = 0;
    char*longestSubStr = null;

    for(ptr=myStr; *ptr != '[=10=]'; ptr++) 
    {  
       if(*ptr == 'e' || *ptr == 'E') 
       {
           int substrLength = ptr - delim;
           if(substrLength  > longest)
           {
               longest = substrLength;
               longestSubstr = delim;
           }
           delim = ptr+1;
       }      
    }
    // show longest length in longest
    // longest substring starts at longestSubStr, first 'longest' chars
    ...

    return 0;   
}

它会记住 最后一个分隔符(字符串的开头,"e" 或 "E"),并且每当找到新的分隔符时,它的长度计算两个定界符之间的子字符串。然后确定这些长度中最长的一个,并记住到目前为止找到的最长子串。

如果您使用字符串库函数 strtok,解决方案非常简单。使用此函数,它会为您拉出子字符串,然后您只需跟踪最长的一个即可。

temp = strtok(input, "eE");
strcpy(best, temp);
bestLen = strlen(best);

while(temp = strtok(NULL, "eE")) {
    if(strlen(temp) > bestLen) {
        strcpy(best, temp);
        bestLen = strlen(best);
    }
}
printf("%s", best);

strtok 会在每次出现 e 或 E 时拆分您的字符串,并且 return 将其拆分为您的临时指针。然后您可以查看临时值,看看它是否足够长以成为新的最佳长度。