Я застрял на части своей домашней работы, мне нужно было найти самое правое вхождение подстроки внутри строки. Я сделал первую часть (могу найти подстроку в строках из одного слова), но теперь у меня проблемы со второй частью. Я должен использовать модифицированную версию getline, чтобы разрешить многословные строки (иначе с пробелами). Вот немодифицированный код getline () и модифицированный strindex (), а также (соответственно). Мне бы тоже понравилось объяснение, у меня иногда возникают проблемы с пониманием написанного кода.
РЕДАКТИРОВАТЬ: Итак, я обновил свой код, вот он:)
/* string index */
int strindex(char str[], char substr[]){
int str_idx, sub_idx, k, c = -1;
for (str_idx = 0; str[str_idx] != '\0'; str_idx++) {
for (sub_idx = str_idx, k = 0; substr[k] != '\0' && str[sub_idx] == substr[k]; sub_idx++, k++)
;
if (k > 0 && substr[k] == '\0')
c = str_idx;
}
return c;
return -1; //never reached?
}
/* getline
*
* Variable Dictionary
* ctchars - character counter, increments once each time getchar() is called
* str_idx - current index of the string, starts at 0, increments with loop
*
*/
getline(char str[], int lim){
int ctchars, str_idx = 0;
ctchars=getchar();
for (str_idx; str_idx<lim-1 && ctchars !=EOF && ctchars!='\n'; ++str_idx)
str[str_idx] = ctchars;
if (ctchars == '\n') {
str[str_idx] = ctchars;
++str_idx;
}
str[str_idx] = '\0';
return str_idx;
}