Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Chuổi ký tự trong C++

7 năm trước 421 lượt xem 3 bình luận 7 năm trước

 cout << p << endl; // Ket qua: simple string
        cout << text << endl; // Ket qua: This is a simple string
    int32_t match_index = (p - text); // Tai sao simple string- This is a simple string = 10

Anh giải thích giúp em với ạ...Tks a nhiều :)) 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Vector đã bình luận 7 năm trước

à sau khi kiểm tra 1 lúc thì mình tháy như thế này: đầu tiên là sao kết quả lại bằng 10???
- 10 ở đây là  độ dài của chuỗi "This is a ". Ta biết cái mảng text thì các phần tử của nó dkd sắp xếp liên tục. mình ví dụ chứ T ở đây là 23645 thì chữ h sẽ là 23646 chữ i sẽ là 23647 ..... chữ s(bắt đầu chữ simple ý) sẽ là 23655. và khi ta trừ đi thì nó sẽ là 10 thôi.
à kiến thức c này. ta có 1 mảng A[] thfi con trỏ A sẽ trỏ vào phàn tử đầu tiên của mảng.
Ở bài trên con trỏ p sẽ trỏ vào chữ s (của simple) và nó sẽ có địa chỉ là 23655 khi đó trừ đi con trỏ của T tức là text ý là 23645 thì sẽ dkd 10.
Sở dĩ mình nói ở p trỏ lun vào phần tử s(của từ simple) vì khi mình test cái này:
 

#include <iostream>
#include <cstring>;
using namespace std;

int main()
{
  char text[] = "This is a simple string";
    char B[] = "simple";

    char *p = strstr(text, B);
        text[10] = 'a';
        text[11] = '\0';
        cout << p << endl; // Ket qua: simple string
        cout << text << endl; // Ket qua: This is a simple string
        cout<< p<< " "<< text<<endl;
    int match_index = (p - text); // Tai sao simple string- This is a simple string = 10
        cout << match_index;

    return 0;
}
ta thấy thay đổi mỗi text mà p cũng thay đổi theo kìa.
và lại khi ta xem chức năng hàm strstr thì nó cũng nói là trả về con trỏ chứ k có tạo ra chuỗi mới. con trỏ ở đây chính là địa chỉ của kí tự bắt đầu trên mảng text. hoàn toàn k có chuỗi nào mới dkd hình thành. Thân.

Anh Thư đã bình luận 7 năm trước

text kiểu char* (char[] là char*), p cũng kiểu char*, nên (p - text) là kiểu char*

int32_t match_index = (p - text); // convert từ char* sang int32_t, do không có mất dữ liệu nên tự động convert (implicit convert)

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 7 năm trước

có thể kết quả của p - text thì cái string hay char kết quả của nó có mã ASCII = 10

Câu hỏi mới nhất