Chình xác, đây gọi là “hack” nè hàm printf sẽ return ra số lượng ký tự đã in lưu vào i, thì i chính là độ dài của chuỗi. Like mạnh
Tính độ dài string mà không dùng hàm length()
Con trỏ trỏ tới một phần tử của chuỗi.
Chính xác
Vì nó là con trỏ, nên phải dùng *it để lấy giá trị tại vị trí nó trỏ tới
E code trên Dev C
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string s="Aaxvbnj";
int i=0;
while( s[i] != '\0'){
i++;
}
cout<<i;
return 0;
}
tính độ dài string s thì y hệt như char s[]
ra kết quả vẫn đúng ạ
Đúng, đây cũng là một cách nếu mình không muốn dùng iterator. std::string
có hỗ trợ operator[]
. Nhưng cẩn thận vì operator[]
sẽ không cảnh báo nếu mình lấy ra phần tử không thuộc về string. Có thể gây ra lỗi. Cũng giống như mình làm với char[].
http://www.cplusplus.com/reference/string/string/operator[]/
A cho e 1 cái ví dụ về cái lỗi này đc ko ạ
Ví dụ trường hợp này, s[4] không tồn tại, nhưng mình vẫn cố lấy ra thì C++ không báo lỗi, nhưng s[4] chứa giá trị gì thì không ai biết được.
string s = "123";
std::cout << s[4];
Em xem bài mảng, con trỏ để hiểu thêm.
Hôm qua mình chỉ bạn cái này sao nói k chạy được
Thế chuỗi có 1000 ký tự cũng copy vào print để tính hả anh :3
Đây là một cách “hack” hay mà. Đâu phải lúc nào cũng áp dụng được. hehe
Hôm nay ngứa nghề nghịch thử, thế mà nó chạy đc, nhưg a Đạt chỉ ra 1 lỗi sai của nó rồi, ngon nhất thì vẫn cứ làm biên con chạy Interator
Cho e hỏi i++ phía sau dùng để làm gì ?
Để đếm thôi, biến i thông thường là biến đếm.
Nếu không cho dùng method của std::string thì dùng strlen cũng được strlen(&s[0])
Chắc thầy muốn trò hiểu cách string trong c/c++ được lưu trữ thế nào nên đánh đố nhau vậy
Superb, đúng là @Gio luôn có những câu trả lời rất đáng ngạc nhiên nhé, em hiểu rõ về std quá
#include <iostream>
#include <string>
int main()
{
std::string s = "abcdxyz";
std::cout << s.begin() - s.end();
}
strlen(str.c_str());
Nếu thử với std::string s=“Hello world!!/0”; thì chẳng có trường hợp nào đếm đủ 15 kí tự cả.
Đó là vì bạn muốn biểu diễn kí tự \ trong chuỗi thì bạn phải ghi \\