2015-03-25 48 views
0

我有一个问题,如标题中所述。这里有更多细节。C程序确定字符数组中没有'e'或'E'的最大子字符串

我的问题是:

a)制定的C函数获得一个字符数组作为输入parameteter和其确定在该字符数组最大串而不'e''E'。打印该子串的长度。

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

循环:输入:“你是一个”。 .OUTPUT: “你AR” 长度:6

+1

但是'我们ar'里面有'e' ... – 2015-03-25 03:29:46

+0

谢谢。我编辑过。 – 2015-03-25 03:32:02

回答

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; 
} 

它remebers的最后一个分隔符(无论是字符串的开始, “E”或“E”),并且每当找到新的分隔符时,计算两个分隔符之间的子串的长度。然后确定这些长度中最长的一个,并记住迄今为止发现的最长的子字符串。

+0

它只打印最后的'e'或'E'后的字符 – 2015-03-25 03:40:08

+0

我明白算法,但我刚开始学习3天前。你能否完全写出整个代码?我非常感谢。谢谢。 – 2015-03-25 03:55:53

+0

我怎样才能打印出子串和它的长度。 – 2015-03-25 04:07:12

0
#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; 
} 
+0

这不确定**长度**。它只适用于第一个“e”之前的第一个子字符串。问题听起来像预计字符串“1e1234e2”为“4”。 – DrKoch 2015-03-25 03:21:03

+0

嗯。输入输出的例子。输入:asdqEasdade和输出是asdad。 printf的长度:5.你能帮我Dr.Koch – 2015-03-25 03:22:24

+0

新的可能会更好。 – whalesf 2015-03-25 04:27:05

2

如果使用字符串库函数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的时间分割你的字符串,并返回到您的临时指针。然后,您可以查看临时值,并查看它是否足够长以成为您的最佳长度。

+0

更多阅读:http://www.cplusplus.com/reference/cstring/strtok/ – Thornkey 2015-03-25 03:49:07

相关问题