0
我剛碰到這個問題。問題是,我有一個字符串,我必須找到字符串中最長的連續子字符串(所以如果我有aaaccaaaaaggt它會打印「A:5」不帶引號),如果有的話,打印它在哪裏和多長時間是。我的做法是,我從最長的可能連續字符串長度和memset它去acgt(其中之一,因爲它是一個DNA序列)。問題是,當我跑的功能和它印我memsetted串有類似:C printf有點怪,打印總廢話
aaaaaaaaaaaaaaaa{Xs⌂▼▐
但說實話,我不知道爲什麼。
unsigned int longestSubstrInSequenceO(const char *str)
{
int i = 0;
char *cntrlStr = (char *)malloc((strlen(str)) * sizeof(char));
char *copied = (char *)malloc((strlen(str)) * sizeof(char));
int size;
strcpy(copied, str);
strLower(copied);
copied[0] = tolower(copied[0]);
printf("%s\n", copied);
for(i; i < strlen(str); i++)
{
printf("%d\n", (strlen(str) - i + 1));
memset(cntrlStr, 'a', (strlen(str) - i) * sizeof(char));
printf("%s\n", cntrlStr);
if(strstr(copied, cntrlStr) != NULL)
{
printf("Longest sequence: %d\n", i);
break;
}
memset(cntrlStr, 'c', (strlen(str) - i + 1) * sizeof(char));
printf("%s\n", cntrlStr);
if(strstr(copied, cntrlStr) != NULL)
{
printf("Longest sequence: %d\n", i);
break;
}
memset(cntrlStr, 'g', (strlen(str) - i + 1) * sizeof(char));
printf("%s\n", cntrlStr);
if(strstr(copied, cntrlStr) != NULL)
{
printf("Longest sequence: %d\n", i);
break;
}
memset(cntrlStr, 't', (strlen(str) - i + 1) * sizeof(char));
printf("%s\n", cntrlStr);
if(strstr(copied, cntrlStr) != NULL)
{
printf("Longest sequence: %d\n", i);
break;
}
memset(cntrlStr, '\0', (strlen(str) - i + 1) * sizeof(char));
printf("%s\n", cntrlStr);
free(cntrlStr);
printf("bbbbbbbbbbb");
cntrlStr = (char *)malloc((strlen(str) - i + 1) * sizeof(char));
//memset(cntrlStr, 0, (strlen(str) - i) * sizeof(char));
}
printf("search end\n");
//strstr();
return 0;
}
所以,大家請,如果你能幫助我,我哪裏出錯我會非常感激。我不要求你寫我的代碼,只是指出這個問題的根源,或者告訴我你將如何做(如果你能做得更好):)謝謝!
'(strlen(str))*(sizeof(char)+ 1)'???你確定這是你的意思嗎? – AnT
錯誤的地方爲'+ 1'。你想'(strlen(str)+1)* sizeof(char)' – Tim
Ooppssssssssssss,我通常在右邊strlen。 – this