我正在尝试在没有整数或数组索引的字符串中返回子字符串的指针。这是我的代码。我不知道如何让它发挥作用。
/*
* Return a pointer to the first character of the first occurrence of
* <substr> in the given <string> or NULL if <substr> is not a substring
* of <string>.
* Note: An empty <substr> ("") matches *any* <string> at the <string>'s
* start.
*****
* YOU MAY *NOT* USE INTEGERS OR ARRAY INDEXING.
*****
*/
char *find_substr(char *string, char* substr) {
char* first_occ = NULL;
while(*string) {
if(*string++ == *substr) {
if(first_occ == NULL){
first_occ = string;
}
char const *a = substr;
while((*string++ == *++a) && (*a)); /*empty*/
if(*a == '\0')
return first_occ;
}
}
return first_occ;
}
答案 0 :(得分:0)
首先,如果substr
为空字符串,则代码不起作用。为此添加一个简单的测试。
第二:为什么你只保存初始角色的第一场比赛?这会导致为find_substr("aab", "ab")
返回错误的指针。
if(first_occ == NULL){
first_occ = string;
}
您应该删除测试。
然后你检查其他字符,但是如果匹配失败,你没有保存string
的值来重置它:
char const *a = substr;
while((*string++ == *++a) && (*a)); /*empty*/
if(*a == '\0')
return first_occ;
以下是更正后的版本:
char *find_substr(char *string, char *substr) {
for (;;) {
if (*string == *substr) {
for (char *p1 = string, *p2 = substring;;) {
if (!*p2)
return string;
if (*p1++ != *p2++)
break;
}
}
if (!*string++)
break;
}
return NULL;
}