01/10/2018, 10:23

Function tìm từ trong chuỗi (lập trình C)

chỉ với kiến thức của lập trình C cho mình hỏi có ai viết được function tìm từ trong chuỗi kí tự giống như hàm “strchr”? và chỉ cho mình hướng giải quyết với…tks vì đã quan tâm!

Henry viết 12:25 ngày 01/10/2018

Theo mình nghĩ là hoàn toàn có thể.
Cái hàm của bạn sẽ tìm với char được cho. Khi mà tìm được vị trí của char được cho trong array char ban đầu thì bạn khai báo một mảng

char newchar[(strlen(char ban đầu) - vị trí tìm được) + 1];
// + ngoài là để trừa cho \0

Rồi bạn chạy for từ vị trí tìm được tới vị trí cuối cùng của char ban đầu và gán từng kí tự một vào newchar. Và cuối cùng nhớ add thêm \0 vào cho newchar nữa.

Trung thịt bò viết 12:36 ngày 01/10/2018

mình hiểu ý bạn, tks. Nhưng mình vẫn còn thắc mắc nữa là "nếu tạo function thì cái newchar đó là của function, vậy sau đó mình xuất cái newchar đó ra function main ntn? //Đang cảm thấy rối não…

Henry viết 12:40 ngày 01/10/2018

Bạn đã biết tới cái malloc chưa?

rogp10 viết 12:24 ngày 01/10/2018

Không, strchr không cần vùng nhớ mới.

Henry viết 12:24 ngày 01/10/2018

Mình vẫn chưa hình dung thế nào mà ta có thể return được một chuỗi mà không dùng malloc.

rogp10 viết 12:30 ngày 01/10/2018

Vậy là bạn chưa xem docs. Nó không trả về cả chuỗi đâu.

Henry viết 12:25 ngày 01/10/2018

Hiểu ra rồi cám ơn bạn đã chỉ giáo ^^

Henry viết 12:38 ngày 01/10/2018

Làm được cái này thì chỉ cần hiểu một tí về con trỏ là làm được à .

char *s = "hello";
thì
*s = 'h'          // same as *(s + 0) = 'h'
*(s + 1) = 'e'
*(s + 2) = 'l'
*(s + 3) = 'l'
*(s + 4) = 'o'
Và sẽ được kết quả sau nếu dùng printf %s
s = "hello"
s + 1 = "ello"
s + 2 = "llo"
s + 3 = "lo"
s + 4 = "o"

Nó chỉ đơn giản là cái địa chỉ và printf sẽ tới đó lấy từng phần tử trong từng địa chỉ ra tới khi nào nó gặp \0.
Bài này bạn chỉ cần đơn giản là cộng lên tới khi nào mà *s không bằng với kí tự bạn muốn tìm. Khi bạn trả về convert nó sang (char *) để return
Dưới đây là đoạn code của mình. Coi nếu bạn nghĩ nó vẫn còn mông lung

char *strchr(char *s, char ch)
{
    for (; *s != ch; s++)
    {
        if (*s == '\0') // trường hợp này là đi đến cuối chuỗi rồi nhưng chưa tìm thấy
        {
            return "Không tìm thấy";
        }
    }
    return (char *)s;
}

Trung thịt bò viết 12:33 ngày 01/10/2018

tks các bạn. Mình mới bắt đầu với C và C là ng.ngữ đầu tiên và chưa biết malloc là gì. Mình đang tự học nên cũng hơi khó khăn, rất cảm ơn ý kiến của các bạn. Mình hiểu vấn đề rồi.

Dark.Hades viết 12:29 ngày 01/10/2018

Chưa biết malloc thì đừng để ý đến nó làm gì, nếu muốn lên C++ thì học luôn cấp phát động của C++

Bài liên quan
0