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 将其拆分为您的临时指针。然后您可以查看临时值,看看它是否足够长以成为新的最佳长度。
我遇到了标题中所述的问题。这里有更多详细信息。
我的问题是:
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 将其拆分为您的临时指针。然后您可以查看临时值,看看它是否足够长以成为新的最佳长度。