Как разрешить пробелы в строке при поиске позиции подстроки в C? - PullRequest
0 голосов
/ 26 октября 2009

Я застрял на части своей домашней работы, мне нужно было найти самое правое вхождение подстроки внутри строки. Я сделал первую часть (могу найти подстроку в строках из одного слова), но теперь у меня проблемы со второй частью. Я должен использовать модифицированную версию 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;

}

1 Ответ

2 голосов
/ 26 октября 2009

У меня есть пара предложений для вас:

for (j=i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++);

Разбей это; не втисни все в структуру управления.

j = i;
k = 0;
for (;;) {
    if (t[k] == '\0') break;
    if (s[j] != t[k]) break;
    j++;
    k++;
}

Получите лучшие имена для ваших переменных.

haystack_inner_index = i; /* get a better name for `i` too */
needle_index = 0;
for (;;) {
    if (needle[needle_index] == '\0') break;
    if (haystack[haystack_inner_index] != needle[needle_index]) break;
    haystack_inner_index++;
    needle_index++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...