我有一个问题,如标题中所述。这里有更多细节。C程序确定字符数组中没有'e'或'E'的最大子字符串
我的问题是:
a)制定的C函数获得一个字符数组作为输入parameteter和其确定在该字符数组最大串而不'e'
'E'
。打印该子串的长度。
b)写主函数来测试a)函数。使用scanf("%[^\n]",...)
或与getchar()
循环:输入:“你是一个”。 .OUTPUT: “你AR” 长度:6
我有一个问题,如标题中所述。这里有更多细节。C程序确定字符数组中没有'e'或'E'的最大子字符串
我的问题是:
a)制定的C函数获得一个字符数组作为输入parameteter和其确定在该字符数组最大串而不'e'
'E'
。打印该子串的长度。
b)写主函数来测试a)函数。使用scanf("%[^\n]",...)
或与getchar()
循环:输入:“你是一个”。 .OUTPUT: “你AR” 长度:6
问答形式@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”),并且每当找到新的分隔符时,计算两个分隔符之间的子串的长度。然后确定这些长度中最长的一个,并记住迄今为止发现的最长的子字符串。
它只打印最后的'e'或'E'后的字符 – 2015-03-25 03:40:08
我明白算法,但我刚开始学习3天前。你能否完全写出整个代码?我非常感谢。谢谢。 – 2015-03-25 03:55:53
我怎样才能打印出子串和它的长度。 – 2015-03-25 04:07:12
#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;
}
如果使用字符串库函数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的时间分割你的字符串,并返回到您的临时指针。然后,您可以查看临时值,并查看它是否足够长以成为您的最佳长度。
更多阅读:http://www.cplusplus.com/reference/cstring/strtok/ – Thornkey 2015-03-25 03:49:07
但是'我们ar'里面有'e' ... – 2015-03-25 03:29:46
谢谢。我编辑过。 – 2015-03-25 03:32:02