01/10/2018, 12:23

Thao tác với chuỗi

char chuoi[255];
char strcopy[50];
char newstr[50];

char *strcut = strstr(chuoi, ":"); //có 1 chuỗi mới chạy từ : đến hết chuỗi
int pos = (int)(strcut - chuoi);// ????
StringExtract(chuoi, 0, pos,strcopy); //từ chuỗi đầu copy từ vị trí 0 -> ví trị cần copy sau khi xong copy nó vào chuỗi mang tên strcopy
strcpy(newstr,strcopy);//copy chuỗi  vừa cut vào 1 chuỗi mới.

mình có 1 chuỗi thế này Hoten: ABC ABC ABCDE
dòng strcut sẽ là : ABC ABC ABCDE
nhưng đến cái vị trí pos sau khi làm xong thì kết quả nó ra = 5 mình ko hiểu cái dòng int pos =(int)(strcut - chuoi); tại sao nó ra = 5 đc ai giải thích cái dòng mình ???

Dark.Hades viết 14:35 ngày 01/10/2018

strstr nó trả về địa chỉ của ký tự ngay sau ký tự : nằm trong mảng ký tự chuoi, nó không tạo mới mà chỉ là hình thức lưu lại địa chỉ của các ký tự đó vào biến mới.
Vậy nên phần phép tính trừ đó là trừ 2 địa chỉ của cùng một mảng kí tự, khi ép kiểu int nó sẽ trả về thứ tự của vị trí ban đầu mà ký tự đầu tiên của strcut giữ nằm trong chuoi

rogp10 viết 14:35 ngày 01/10/2018

StringExtract này khá là lủng củng: đã có con trỏ chuỗi rồi mà còn phải chỉ ra vị trí đầu là ntn

Nguyễn Phú Thành viết 14:32 ngày 01/10/2018

nó ko đơn giản thế đâu bởi vì chuỗi nhập vào ngăn cách bằng dấu : or / or khoảng trắng và … tương ứng với mỗi thông tin của 1 ai đó mỉnh chỉ lấy VD ngắn để hỏi cái chỗ ?? thôi cái hàm đó để sau khi lấy đc thông tin ra thì cắt chuỗi or copy, copy đó đi tiếp tục tiếp tục đến khi ko còn kí tự : đồng nghĩa với việc hết thông tin của 1 ai đó.

rogp10 viết 14:23 ngày 01/10/2018

Vì kí tự thứ i của s là *(s+i)

Nguyễn Phú Thành viết 14:24 ngày 01/10/2018
lớp - họ tên - quê quán - năm sinh - xếp loại

A10: Tran Van Tien: Nam Dinh: 1996: Gioi

thông tin 1 file như này có thể cách nhau = các kí tự khác nhau ko nhất thiết phải là :

StringExtract(chuoi, pos + 2, strlen(chuoi)-1, chuoi); //sau khi có info thì cắt dòng info trong chuỗi đó đi

strcut = strstr(chuoi, ":"); //có 1 chuỗi mới chạy từ : đến hết chuỗi
pos = (int)(strcut - chuoi);// ????
StringExtract(chuoi, 0, pos,strcopy); //từ chuỗi đầu copy từ vị trí 0 -> ví trị cần copy sau khi xong copy nó vào chuỗi mang tên strcopy
strcpy(newstr,strcopy);//copy chuỗi  vừa cut vào 1 chuỗi mới.

đây là cách lấy thông tin của : thứ 2 và 3,…

Dark.Hades viết 14:38 ngày 01/10/2018

vậy bạn phải tự tổng kết lại kiểu dữ liệu chính có trong file rồi bắt đầu parse chuỗi, chứ từ một chuỗi/file bất kì mà parse thì làm sao code được.
cái strcut ấy bạn gọi strstr lần nào nó sẽ trả lại mảng kí tự mới tại ngay sau đó

Nhìn thông tin bạn đưa thì file chỉ có dấu : thôi, việc bạn làm là strstr đến khi nào null hoặc ra ngoài phạm vi của mảng char thì dừng.

Bài liên quan
0