Bài tập C cần giúp đỡ ạ

Bài tập của e như này ạ, e vắt óc suy nghĩ vận dụng, nhưng bây giờ dừng chân được ở mức lấy ra được 1 cái array có sắp xếp các từ nhưng vẫn có từ lặp :’(

Bạn thử dùng kiểu dữ liệu set trong C xem. Khi có unique list rồi thì mới bắt đầu sort.

Set thì nó sẽ không bị lặp phần tử đúng không, để mình tìm hiểu :smiley:

đây là bài “word count” kinh điển :D, đi phỏng vấn mấy lần điêu bắt code cài này

2 Likes

oh :’( e loay hoay cả tối qua chưa làm được

Nếu đã sắp xếp thì em có thể làm như sau:
anh viết mã giả

c=  s[0];
count = 1;
for(int i = 1; i< s.length;i++){
 if(c!= s[i]) {
   //output c , count
   //------------------------
   // reset 
   c= s[i];
   count =1;
 } else {
   count ++;
 }
}
2 Likes

Đọc cái cái gợi ý mình chợt nghĩ ra cách làm luôn, tạo 1 cái array có tất cả các chữ cái, sau đó đếm là được

Đúng e, set không lưu phần từ giống nhau, có thể khi e sort xong, đọc lại phần tử của sorted array rồi đếm xem với một phần từ xuất hiện bao nhiêu lần ở string gốc.

1 Like

Dùng mảng đếm số lần xuất hiện từng kí tự luôn

int cnt[256];
memset(cnt,sizeof (cnt),0);
for(int i=0; i< strlen(s);i++) 
     if(isalnum(s[i])) cnt[tolower(s[i])]++;

// Ouput
for(int i=0; i<256;i++) 
     if(cnt[i]) printf("%c %d\n",i,cnt[i]);
2 Likes

Em thấy làm giống anh @Gio là tốt rồi.

Sao phải dùng đến set, rồi sort này nọ chi vậy nhỉ.

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