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 ???
Bài liên quan
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
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à ntnnó 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 đó.
Vì kí tự thứ i của s là *(s+i)
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à
:
đây là cách lấy thông tin của
:
thứ 2 và 3,…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ọistrstr
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ảngchar
thì dừng.