繁体   English   中英

C程序确定char数组中不带'e'或'E'的最大子字符串

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

我有标题中所述的问题。 这里更多细节。

我的问题是:

a)开发一个C函数,该函数获取一个char数组作为输入参数,并确定该char数组中最大的子字符串,而不用'e' 'E' 打印该子字符串的长度。

b)编写主要功能以测试a)功能。 使用scanf("%[^\\n]",...)或使用getchar()循环

EX:输入:“你是一个。” .output:“ you ar”长度:6

如果使用字符串库函数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);

每当有e或E时,strtok都会分割您的字符串,并将其返回到您的临时指针中。 然后,您可以查看temp值,看看它是否足够长以成为新的最佳长度。

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


while(myStr[j] != '\0'){  //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 != '\0'; 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”),并且一旦找到新的定界符,就会计算两个定界符之间的子字符串的长度。 然后确定这些长度中的最长者,并记住迄今为止找到的最长子串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM