30/09/2018, 16:02

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

Em có 1 string s = "abcdxyz".
Không dùng hàm s.length() để tính độ dài string này, thì còn cách nào khác không ạ ?
Nếu như là char s[]="abcdxyz" thì có thể kiểm tra cuối xâu, vậy còn cái này thì sao ạ ?

Nguyễn Minh Dũng viết 18:06 ngày 30/09/2018

Cho anh hỏi lý do tại sao em không muốn dùng hàm length()?

#include <iostream>
#include <string>

main()
{
    std::string s = "abcdxyz";
    int len = 0;

    for(std::string::iterator it = s.begin(); it != s.end(); ++it)
    {
        if (*it != '\0')
            len++;
    }

    std::cout << len;
    return 0;
}
Phát Nguyễn viết 18:12 ngày 30/09/2018

Đề bài yêu cầu như vậy a ạ

Đỗ Trung Quân viết 18:12 ngày 30/09/2018

Không dùng hàm s.length() để tính độ dài string này, thì còn cách nào khác không ạ ?

Cái này hay dùng trong vector.

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

int main ()
{
    string s="abcdxyz";
    //size of string 
    cout<<s.size();
}
Nguyễn Minh Dũng viết 18:15 ngày 30/09/2018

dùng size chắc cũng không cho đâu =))

Phát Nguyễn viết 18:11 ngày 30/09/2018

size() và length() đều không đc dùng ạ, phải code như a Đạt thôi

Đỗ Trung Quân viết 18:17 ngày 30/09/2018

Đắng =)) lòng. Vậy làm vòng while đi. cho i =0;s[i] != null ; i++ xem sao. Code anh đạt là code c++, chưa quen nhìn khó. hehe =)).

Nguyễn Minh Dũng viết 18:14 ngày 30/09/2018

Ủa, Phát Nguyễn hỏi C++ mà

Đỗ Trung Quân viết 18:11 ngày 30/09/2018

à vâng. Em nói ý của em mà. Trừ những bài không làm cách nào mà bắt buộc hàm có sẵn. Không thì em toàn code tính toán bình thường
Chắc phải chuyển qua chuẩn C++ cho quen. tại nhà trường ngày trước dạy C++ mà cứ như dạy C. Thành ra nhiễm C nặng.

Phát Nguyễn viết 18:06 ngày 30/09/2018

Nếu như là char s[] thì mới dùng đc i =0;s[i] != null ; i++ chứ, cái này nó là string s mà

Đỗ Trung Quân viết 18:12 ngày 30/09/2018

Nếu như là char s[] thì mới dùng đc i =0;s[i] != null ; i++ chứ, cái này nó là string s mà

Cái này mình viết suy nghĩ của mình thôi chứ k phải lệnh code nha @@

Thanh Tùng viết 18:04 ngày 30/09/2018

std::string s = “abcdxyz”

cho e hỏi khai báo như này có khác gì bình thường ko?

Nguyễn Minh Dũng viết 18:11 ngày 30/09/2018

Em xem các thảo luận ở đây sẽ rõ.

Tiếp tục thảo luận từ đây C++ Chương I:Bài Tập Căn Bản:
viết 18:17 ngày 30/09/2018

hôm nọ em có đọc ở đâu đó cách này

i = printf("Hello world");
printf("%d", i);
AnNdth viết 18:08 ngày 30/09/2018

Em có đọc trong một tài liệu:
s.begin(): Trả về iterator đầu tiên của chuỗi.
s.end(): Trả về iterator lặp cuối của chuỗi

  1. Vậy cho e hỏi iterator ở đây là gì?
  2. Khi mình không khai báo using namespace std thì mình p ghi std::string::iterator để khai bao biến phải không?
  3. Tại sao phần phải dùng *it ở câu lệnh if?
Nguyễn Minh Dũng viết 18:05 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:09 ngày 30/09/2018
  1. Vậy cho e hỏi iterator ở đây là gì?

Con trỏ trỏ tới một phần tử của chuỗi.

  1. Khi mình không khai báo using namespace std thì mình p ghi std::string::iterator để khai bao biến phải không?

Chính xác

  1. Tại sao phần phải dùng *it ở câu lệnh if?

Vì nó là con trỏ, nên phải dùng *it để lấy giá trị tại vị trí nó trỏ tới

Phát Nguyễn viết 18:11 ngày 30/09/2018

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 ạ

Nguyễn Minh Dũng viết 18:06 ngày 30/09/2018

Đú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[]/

Phát Nguyễn viết 18:05 ngày 30/09/2018

lấy ra phần tử không thuộc về string.

A cho e 1 cái ví dụ về cái lỗi này đc ko ạ

Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

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.

Bài liên quan
0