01/10/2018, 11:11

Bài tập với chuỗi

Mình có bài tập là in ra tổng số kí tự của từng từ trong chuỗi, và từ đó. Thầy mình bắt viết theo driver của thầy nên mình tìm hoài không ra cách. Thầy mình yêu cầu dùng getchar() và ungetc(). Mình không biết làm sao để con trỏ giữ lại vị trí trong vòng lặp.

Code mình cần viết sẽ nằm trong getword(char *w).

		trickier	to		master
p0 sẽ in ra:
n=8, s=[trickier] 
n=2, s=[to]
n=6, s=[master]
n=0, s=[]       trả lại 0 và mảng rỗng nếu là dấu xuống dòng
n=-1, s=[]     nếu gặp EOF thì trả lại -1 và mảng rỗng 

Mình

Driver p0.c:

> #include "getword.h"

> int main()

> {
> int c;
> char s[STORAGE];

> for( ; ; ) {
>         (void) printf("n=%d, s=[%s]
", c = getword(s), s);
>         if (c == -1) break;
>         }
> }

Header getword.h:

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

> #define STORAGE 255

> int getword(char *w);
rogp10 viết 13:14 ngày 01/10/2018

Cái này là cài đặt hàm strtok :v… nếu không có hai hàm hoạt động trên stream. Cái này hơi kì kì, vậy input là từ đâu?

Huy Nguyen viết 13:12 ngày 01/10/2018

mình nghĩ input là mảng char s. Thầy mình bắt xài getch() với ungetch() nên mình không hiểu làm sao để trả về giá trị của mảng s trong hàm getword.

rogp10 viết 13:22 ngày 01/10/2018

Lên hỏi lại thầy. Quyền lợi của bạn mà.

Pham Van Hai viết 13:19 ngày 01/10/2018

Bạn viết một hàm lấy ký tự dùng getchar gán vào mảng 1 s rồi dùng mảng đó.
Bạn tham khảo hàm getline trong các ví dụ dưới đây:
http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_18

Huy Nguyen viết 13:13 ngày 01/10/2018

Cảm ơn bạn. Nhưng làm sao để mình lưu lại vị trí con trỏ. Vì driver sẽ lặp lại nhiều lần chứ không trả về 1 lần chạy duy nhất.

Bạn cho mình hỏi nếu mình dùng delimiter (0 byte) thì làm cách nào để chèn vào chuỗi đó.

nghia viết 13:14 ngày 01/10/2018

Đây là lập trình driver linux à bạn?

Huy Nguyen viết 13:26 ngày 01/10/2018

khong ban. lap trinh he dieu hanh

nghia viết 13:26 ngày 01/10/2018

Bạn lập trình cho nền tảng HĐH linux ah? có thể cho tui xin tài liệu đc không? Cảm ơn bạn nhiều!

Bài liên quan
0