Lỗi bài tập về strlen()

c

(H βίος (γσυ)) #1

Đề bài là : nhập 1 chuỗi rồi đêm số nguyên âm và phụ âm.
Em nhập từ hjk thì nếu đúng nguyên âm sẽ là 0 và phụ âm là 3.
Còn đoạn code của em cho ra nguyên âm là 0 và phụ âm là 4.

#include<string.h>
#include<stdio.h>




void am(char str[]){
	int countn=0, countp=0;
	for(int i=0;i<=strlen(str);++i){
			if(str[i] == 'u'||str[i] == 'e'||str[i] == 'o'||str[i] == 'a'||str[i] == 'i') countn++;
			else countp++;
		}
	printf("nguyen am = %d\n", countn);
	printf("phu am = %d\n", countp);
}

int main(){
	char str[30];
	gets(str);
	am(str);

	
	
	return 0;
}

(明玉) #3

À sorry, chắc là nhầm chỗ này: i<=strlen(str);


(H βίος (γσυ)) #4

nếu minh đổi thành dấu < thì sẽ được kq đúng. Mình thắc mắc không phải strlen là tính đến ký tự trước NULL. Nếu thế thì để <= là đúng đúng ko ạ ?


(明玉) #5

strlen không đếm kí tự null, nó gặp null là nó dừng lại.
viết như bạn là bạn tính luôn cả kí tự null, và theo như điều kiện, thì kí tự null là phụ âm :smiley:


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?