2014-09-01 1 views
-1
void reverse(char s[]) { 
    int i; 
    int len = 0; 
    for (i=0; s[i] != '0'; i++) { 
     len = len + 1; 
    } 

위 코드는 위 코드입니다. s []는 내가 뒤집어 쓰려고하는 문자열입니다. 도와주세요! 감사합니다.C의 문자열에 몇 개의 문자가 있는지 계산하려합니다.

+1

무엇이 문제입니까? –

+1

마지막 닫기 중괄호'}'가 누락되었습니다. 실제로 물어볼 질문이 있습니까? – indiv

+1

'0'! = '\ 0'... –

답변

5

null 종료 문자를 테스트하려면 '\0'을 사용하십시오. C에서

for (i=0; s[i] != '\0'; i++) { 
    len = len + 1; 
} 
0

Stringsnull 또는 \0 문자로 종료 문자 단지 배열입니다.

s[i] != '0'을 색인 i의 문자가 null인지 여부를 확인하는 것으로 변경하십시오.

0

string.h 헤더에 사용

strrev(string1,string2) 

. 같은 머리글에서

strlen(string1) 

을 사용하여 길이를 찾을 수도 있습니다.

1
void reverse(char s[]) { 
    size_t i,j; 
    for(i=0; s[i] != '\0'; ++i) 
     ; 
    if(i < 2) 
     return ; 
    for(j=0; j < --i; ++j){ 
     char c = s[i]; 
     s[i] = s[j]; 
     s[j] = c; 
    } 
} 
+0

+1 좋고 짧습니다. (내가'size_t i, j;'를 제안 하겠지만) – chux

+0

물론입니다. 나는 그것을 바꿨다. – BLUEPIXY

1

There isn't a strrev in standard C 그러나 그물 주변에는 많은 구현이 가능합니다. 여기에 내가 here을 발견 하나입니다 :이 주어진 문자열을 수정하고 장소에 역을 수행

#include <string.h> 

char *strrev(char *str) 
{ 
    char *p1, *p2, c; 

    if (! str || ! *str) 
     return str; 
    for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) 
    { 
     c = *p1; 
     *p1 = *p2; 
     *p2 = c; 
    } 
    return str; 
} 

하는 것으로.

+1

그건 [XOR 스왑 트릭] (https://stackoverflow.com/questions/249423/how-does-xor-variable-swapping-work)의 끔찍한 학대입니다. 왜 임시 변수를 사용하고 메모리 액세스 수를 반으로 줄여야합니까? –

+0

글쎄, 내가 말한대로 interwebs에서 그것을 발견했다. :) 네 말이 맞아, 완전히 불필요한거야. 나는 좋은 깨끗한 스왑을 사용하도록 편집 할 것이다. – ldgabbay