C에서 서브 스트링 위치를 검색 할 때 문자열의 공백을 허용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1622279

  •  06-07-2019
  •  | 
  •  

문제

나는 숙제의 일부에 갇혀 있었고, 끈 내부의 서브 스트링의 가장 옳은 일을 찾아야했습니다. 첫 번째 부분이 완료되었습니다 (단일 단어 문자열에서 하위 문자열을 찾을 수 있습니다). 그러나 이제는 두 번째 부분에 문제가 있습니다. 다중 단어 문자열 (일명 공백)을 허용하기 위해 수정 된 버전의 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;

}
도움이 되었습니까?

해결책

몇 가지 제안이 있습니다.

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++;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top