
Nguyên bản được gửi bởi
camping29
Code đã viết, ko báo lỗi nhưng cho gái trị ko đúng :
#include <stdio.h>
#include <conio.h>
#include <string.h>
int ktra(char arr[]);
int B[100]; //nên khởi tạo cho tất cả các phần tử = 0 trước.
main()
{
char str_arr[5]; // Tiết kiệm quá xá!
printf("\nSo chu cai co trong chuoi : %d",ktra
(str_arr
)); getch();
}
int ktra(char arr[])
{
int n=0;
for(int i
=0;i
<strlen(arr
);i
++) {
if(B[i]==0)
for(int j
=0;j
<strlen(arr
);j
++) if((B[j]==0) &&(arr[i]==arr[j]) && (j!=i)) // Đã chắc chắn arr[i] là chữ cái chưa? Có phân biệt chữ thường chữ hoa ko?
{
B[j]=1;
}
// Xem 2 lệnh sau có nhằm trong cặp { } nào không?
n++;
B[i]=1;
}
return n;
}
-Giúp mình sửa và giải thích lun nha

. Đầu tiên hãy sửa code mình, sau đó nếu muốn hãy đưa ra code tối ưu cho bài này nếu bạn có thể

Đây là code "tối ưu" của tớ, cách nghĩ ngược lại với Chautieu47 và không cần phải xài strchr trong vòng for.
//////////////////////////////////////////////////////////////////////////////////////
// Đề bài : đếm số chữ cái khác nhau có trong chuỗi.
// http://forums.congdongcviet.com/showthread.php?t=9191
// (c) Berberin
//////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <ctype.h>
//////////////////////////////////////////////////////////////////////////////////////
int main(){
char S[100]; //Input
char c; // xài tạm
bool M['Z'-'A'+1]; // 26 phần tử, để đánh dấu xem chữ cái đã được xét chưa (không phân biệt hoa/thường)
unsigned Count = 0; //Output
// Khởi tạo
// Đếm
for (int i = 0; S[i]; i++)
if (!M[c]){
M[c] = true;
Count++;
}
}
// Kq
printf("Count = %d \n", Count
);
return EXIT_SUCCESS;
}
//////////////////////////////////////////////////////////////////////////////////////
Ví dụ
Code:
S = Hello the World!!
Count = 8
Press any key to continue . . .