Tính độ dài string mà không dùng hàm length()

Chình xác, đây gọi là “hack” nè :smile: 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 :smile:

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

3 Likes

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 ạ

1 Like

Đú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.

3 Likes

Hôm qua mình chỉ bạn cái này sao nói k chạy được :smile:

Thế chuỗi có 1000 ký tự cũng copy vào print để tính hả anh :3

1 Like

Đây là một cách “hack” hay mà. Đâu phải lúc nào cũng áp dụng được. hehe

3 Likes

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

3 Likes

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]) :wink:

3 Likes

Hay nè, vậy bài này có nhiều cách giải chứ đâu có khó. Thank @tranhuanltv

1 Like

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

4 Likes

Nếu anh @ltd đã dùng iterator sao không tính như thế này:

int len=s.end()-s.begin();
5 Likes

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á :+1:

#include <iostream>
#include <string>

int main()
{
    std::string s = "abcdxyz";
    std::cout << s.begin() - s.end();
}
1 Like
strlen(str.c_str());
1 Like

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ả.

1 Like

Đó là vì bạn muốn biểu diễn kí tự \ trong chuỗi thì bạn phải ghi \\

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?