2013-04-23 3 views
2

문자열을 구문 분석하고 문자열의 마지막 문자를 확인하고 싶습니다. 예 :C에서 문자열 구문 분석

char *name = "angela"; 

int i; 
for(i = 0; i <= strlen(name); i++) { 
    if(name[i] == 'a' && i == strlen(name)) { 
     *do something here*; 
    } 
} 

시도했지만 아무 일도 발생하지 않았습니다. 왜이 기능이 작동하지 않습니까?

+3

문제와 관련이 없지만 루프 외부에서'strlen() '을 호출하고 해당 값을 변수에 저장해야합니다. 각 호출에서 문자열 전체를 반복합니다. –

+0

은 모든 반복을 처리하는 대신 strlen()의 값을 저장합니다. –

+0

@FredLarson Gotcha! 감사. – user1889966

답변

10

변경 :

for(i = 0; i <= strlen(name); i++) { 
    if(name[i] == 'a' && i == strlen(name)) { 

에 :

for(i = 0; i < strlen(name); i++) { 
    if(name[i] == 'a' && i == strlen(name) - 1) { 

이유 : C 문자열, s의 첫 번째 문자는 인덱스 0을 가지고 있으며, 마지막 문자는 총 인덱스 strlen(s) - 1있다 strlen(s) 자입니다.

+1

또한 'for'에 대한 수정 : for (i = 0; i

+0

@Joker : 좋은 점 - 고마워요. –

3

함수 strlen은 마지막 인덱스가 아닌 문자열의 실제 길이를 반환합니다. 아니오 (

if(name[i] == 'a' && i == strlen(name) -1) 
3

당신은 그냥이 같은 문자열의 마지막 문자를 확인하실 수 있습니다 : 귀하의 예를 들어 "안젤라"에서 , strlen 함수는 6 반환하지만이 문자 배열의 마지막 인덱스 5. 그래서 당신은 사용할 필요가있다 루프를 사용해야 함) :

char *name = "angela"; 
if(strlen(name)>0)//do the check below only if the string is not empty 
if(name[strlen(name)-1]=='a') 
{ 
    //do something here 
}