2013-04-10 4 views
-1

C에서 문자로 문자열을 읽으려고합니다. 문자열 클래스가 없으므로이를 지원하는 기능이 없습니다. 여기에 내가하고 싶은 것입니다 : 내가 가진,C에서 문자로 문자열 문자 읽기

char m[80]; //I do some concenation, finally m is: 

m= 12;256;2; 

이제 내가 semicolumns 사이에 얼마나 많은 문자를 계산합니다. 이 예에서는 각각 2,4 및 1 문자가 있습니다. 어떻게 할 수 있니?

고맙습니다.

+3

이것은 유효하지 않으므로 예상 한 것과 거의 일치하지 않습니다. –

+0

내 질문에 무엇이 잘못 되었는가, 그리고 왜 하향 투표가 필요한지 나는 모른다. – yrazlik

답변

2

"도움이되는 기능이 없습니다"는 것은 무엇을 의미합니까? 저기있다. 문자열을 읽으려면 함수 fgets을 확인하십시오. 손에서 문제에

,의 말을하자이 있습니다

char m[80] = "12;256;2"; 

을 그리고 당신은 세미콜론 사이의 문자를 계산합니다. 가장 쉬운 방법은 strchr을 사용하는 것입니다.

char *p = m; 
char *pend = m + strlen(m); 
char *plast; 
int count; 

while(p != NULL) { 
    plast = p; 
    p = strchr(p, ';'); 

    if(p != NULL) { 
     // Found a semi-colon. Count characters and advance to next char. 
     count = p - plast; 
     p++; 
    } else { 
     // Found no semi-colon. Count characters to the end of the string. 
     count = pend - p; 
    } 

    printf("Number of characters: %d\n", count); 
} 
+1

다른 옵션은'strtok'입니다. 이것은 틀림없이 더 좋습니다. –

+0

그래. 나는 가장 쉽다고 말했다. 어쩌면'strtok'도 (틀림없이) 더 쉬울 것입니다. 스레드로부터 안전하지 않기 때문에 일반적으로 권장하지 않습니다. 이 실습에서는 스레드 안전성이 중요하지 않습니다. 그러나 공정한 충분한 코멘트. – paddy

+2

사실, 내가 생각할 때, 'strtok'은 인접한 구획 문자를 먹을 것이기 때문에 적절하지 않습니다. '12; 256 ;;; 2 '이면'strtok '은 CSV 행인 것으로 보이는 길이가 0 인 필드를 인식하지 못합니다. – paddy

1

글쎄, 여기에 당신을 위해 코드를 작성했는지 모르겠다. 하지만 ...

int strcount, charcount = 0, numcharcount = 0, num_char[10] = 0; 
              //10 or how many segments you expect 

for (strcount = 0; m[strcount] != '\0'; strcount++) { 

    if (m[strcount] == ';') { 

     num_char[numcharcount++] = charcount; 
     charcount = 0;    

    } else { 

     charcount++; 

    } 

} 

배열에 ; 사이의 각 문자의 양을 저장합니다. 그것은 부끄러웠다. 인정 하겠지만 네가 물었던 것 때문에 효과가있다.

1

문자열을 수정하는 데 신경 쓰지 않는다면 가장 쉬운 방법은 strtok을 사용하는 것입니다.

#include <string.h> 
#include <stdio.h> 
int main(void) { 
    char m[80] = "12;256;2;"; 
    char *p; 

    for (p = strtok(m, ";"); p; p = strtok(NULL, ";")) 
     printf("%s = %u\n", p, strlen(p)); 
} 
관련 문제