Вообще, такие вещи каноничнее делать через while, т.е. строку (раз она гарантированно заканчивается нулём) можно перебирать и так:
char * p1 = str1;
char * p2 = str2;
char c1, c2;
while(c1=*str1++){
//с1 - очередной символ str1
str2 = p2; //чтобы всегда с начала str2
while(c2=*str2++){
//с2 - очередной символ str2
if(c1 ==c2){
//но вернуть-то требуют позицию от начала строки, а не адрес!
return str2 - p1;
}
}
}
А можно и ещё короче:
char * p1 = str1;
char * p2 = str2;
while(*str1){
//с1 - очередной символ str1
str2 = p2; //чтобы всегда с начала str2
while(*str2){
//с2 - очередной символ str2
if(*str1++ ==*str2++){
//но вернуть-то требуют позицию от начала строки, а не адрес!
return str2 - p1;
}
}
}
... и никаких strlen. strlen - это "паскалевский" стиль программирования, в нём-то строки нулём не заканчиваются.
Вообще, такие вещи каноничнее делать через while, т.е. строку (раз она гарантированно заканчивается нулём) можно перебирать и так:
char * p1 = str1;
char * p2 = str2;
char c1, c2;
while(c1=*str1++){
//с1 - очередной символ str1
str2 = p2; //чтобы всегда с начала str2
while(c2=*str2++){
//с2 - очередной символ str2
if(c1 ==c2){
//но вернуть-то требуют позицию от начала строки, а не адрес!
return str2 - p1;
}
}
}
А можно и ещё короче:
char * p1 = str1;
char * p2 = str2;
while(*str1){
//с1 - очередной символ str1
str2 = p2; //чтобы всегда с начала str2
while(*str2){
//с2 - очередной символ str2
if(*str1++ ==*str2++){
//но вернуть-то требуют позицию от начала строки, а не адрес!
return str2 - p1;
}
}
}
... и никаких strlen. strlen - это "паскалевский" стиль программирования, в нём-то строки нулём не заканчиваются. :p