0

如标题所述,我遇到了问题。这里有更多细节。

我的问题是:

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

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

例如:输入:“你是一个。” .输出:“你是”长度:6

4

3 回答 3

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

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

于 2015-03-25T03:43:43.850 回答
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;
}
于 2015-03-25T03:17:42.773 回答
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”),并且每当找到新的分隔符时,都会计算两个分隔符之间的子字符串的长度。然后确定这些长度中最长的一个,并记住迄今为止找到的最长子串。

于 2015-03-25T03:26:29.673 回答