Làm cách nào để nhận được số ký tự trong một chuỗi trong C++?Cách lấy số ký tự trong chuỗi std ::?
Trả lời
Nếu bạn đang sử dụng một std::string
, gọi length()
:
std::string str = "hello";
std::cout << str << ":" << str.length();
// Outputs "hello:5"
Nếu bạn đang sử dụng một c-string, gọi strlen()
.
const char *str = "hello";
std::cout << str << ":" << strlen(str);
// Outputs "hello:5"
Hoặc, nếu bạn tình cờ thích sử dụng chuỗi Pascal kiểu (hoặc f ***** chuỗi như Joel Spolsky likes to call them khi họ có một NULL trailing), chỉ dereference ký tự đầu tiên.
const char *str = "\005hello";
std::cout << str + 1 << ":" << *str;
// Outputs "hello:5"
Ai trong tâm trí của họ sẽ sử dụng các chuỗi kiểu Pascal? – Xarn
không dài() trả về số byte, không phải số ký tự? –
Đối với chuỗi std ::, nó giống nhau (trừ khi bạn đang lưu trữ mã hóa độ dài biến đổi hoặc sử dụng chuỗi std :: để lưu trữ các ký tự nhiều byte). Nếu bạn đang làm điều đó, bạn sẽ không nhận được nhiều sự giúp đỡ với bất cứ điều gì từ thư viện std, vì vậy bạn có thể xử lý cán strlen của riêng bạn là tốt. Đối với wstring, u16string và u32string, nó trả về số ký tự thay vì byte. (Một lần nữa với điều kiện rằng nếu bạn đang sử dụng một mã hóa có độ dài thay đổi trong bất kỳ của những người, bạn sẽ phải cuộn strlen của riêng bạn). – Eclipse
string foo;
... foo.length() ...
.length và .size đồng nghĩa, tôi chỉ nghĩ rằng "length" là một từ hơi rõ ràng hơn.
() là phổ quát trên các vùng chứa. – rlbond
kích thước() được khuyến khích bởi vì tôi nhớ nghe điều đó trong một số triển khai nó sẽ trả về "length() + 1" (vì nó bao gồm null terminator). Vì vậy, chỉ cần sử dụng chiều dài() vì nó sạch hơn và di động hơn. – nlaq
@LaQuet, Nếu bạn không sử dụng trình biên dịch tuân thủ tiêu chuẩn hoặc triển khai STL, bạn có nhiều điều phải lo lắng hơn. – strager
std::string str("a string");
std::cout << str.size() << std::endl;
Khi giao dịch với C++ chuỗi (std :: string), bạn đang tìm kiếm length() hoặc size(). Cả hai sẽ cung cấp cho bạn cùng một giá trị. Tuy nhiên, khi xử lý các chuỗi C-Style, bạn sẽ sử dụng strlen().
#include <iostream>
#include <string.h>
int main(int argc, char **argv)
{
std::string str = "Hello!";
const char *otherstr = "Hello!"; // C-Style string
std::cout << str.size() << std::endl;
std::cout << str.length() << std::endl;
std::cout << strlen(otherstr) << std::endl; // C way for string length
std::cout << strlen(str.c_str()) << std::endl; // convert C++ string to C-string then call strlen
return 0;
}
Output:
6
6
6
6
cho một đối tượng chuỗi thực tế:
yourstring.length();
hoặc
yourstring.size();
Nếu bạn đang sử dụng cũ, C kiểu chuỗi thay vì n cái bình đựng nước, chuỗi STL-phong cách, có các strlen
chức năng trong thư viện thời gian chạy C:
const char* p = "Hello";
size_t n = strlen(p);
Nó phụ thuộc vào loại chuỗi bạn đang nói về. Có rất nhiều loại dây:
const char*
- một C-style multibyte chuỗiconst wchar_t*
- một C-style rộng chuỗistd::string
- một "chuẩn" multibyte chuỗistd::wstring
- một " tiêu chuẩn "chuỗi rộng
Đối với 3 và 4, bạn có thể sử dụng phương pháp .size()
hoặc .length()
.
Đối với 1, bạn có thể sử dụng strlen()
, nhưng bạn phải đảm bảo rằng các biến chuỗi không phải là NULL (=== 0)
Đối với 2, bạn có thể sử dụng wcslen()
, nhưng bạn phải đảm bảo rằng các biến chuỗi là không phải là NULL (=== 0)
có nhiều loại chuỗi khác trong thư viện phi tiêu chuẩn C++, chẳng hạn như MFC của CString
, ATL của CComBSTR
, ACE của ACE_CString
, và như vậy, với các phương pháp như .GetLength()
, và vân vân. Tôi không thể nhớ những chi tiết cụ thể của tất cả chúng ngay từ đầu tôi.
Thư viện STLSoft đã trừu tượng hóa tất cả những gì họ gọi là string access shims, có thể được sử dụng để nhận độ dài chuỗi (và các khía cạnh khác) từ bất kỳ loại nào. Vì vậy, cho tất cả các bên trên (bao gồm cả những thư viện không chuẩn) sử dụng cùng chức năng stlsoft::c_str_len()
. This article mô tả cách hoạt động của nó, vì nó không hoàn toàn rõ ràng hoặc dễ dàng.
nếu bạn đang sử dụng std :: string, có hai phương pháp phổ biến cho rằng:
std::string Str("Some String");
size_t Size = 0;
Size = Str.size();
Size = Str.length();
nếu bạn đang sử dụng chuỗi C phong cách (sử dụng char * hoặc const char *) sau đó bạn có thể sử dụng:
const char *pStr = "Some String";
size_t Size = strlen(pStr);
Đây có thể là cách dễ nhất để nhập chuỗi và tìm chiều dài của chuỗi.
// Finding length of a string in C++
#include<iostream>
#include<string>
using namespace std;
int count(string);
int main()
{
string str;
cout << "Enter a string: ";
getline(cin,str);
cout << "\nString: " << str << endl;
cout << count(str) << endl;
return 0;
}
int count(string s){
if(s == "")
return 0;
if(s.length() == 1)
return 1;
else
return (s.length());
}
Điều gì mà bạn nghĩ rằng đếm (chuỗi) nào chuỗi đó :: length() không? Bên cạnh việc không cần thiết tạo thêm một bản sao của chuỗi và trả về giá trị âm nếu có hơn 2 tỷ ký tự trong chuỗi. – Eclipse
Cách đơn giản nhất để có được chiều dài của chuỗi mà không cần bận tâm về namespace std như sau
chuỗi có/không có không gian
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
getline(cin,str);
cout<<"Length of given string is"<<str.length();
return 0;
}
chuỗi không có khoảng
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
cin>>str;
cout<<"Length of given string is"<<str.length();
return 0;
}
- 1. Twig: Cách lấy ký tự đầu tiên trong một chuỗi
- 2. Cách lấy số ký tự trong chuỗi trong SQL Giao dịch, cách "khác"
- 3. Cách lấy ký tự đầu tiên của chuỗi trong SQL?
- 4. std :: chuỗi xóa ký tự cuối cùng không thành công?
- 5. Lấy hai ký tự từ chuỗi trong python
- 6. Lấy từng ký tự trong một chuỗi bằng VBScript
- 7. Mã hóa ký tự và chuỗi ký tự trong C++
- 8. Xuất tổng số ký tự chuỗi
- 9. Ruby - cách chọn một số ký tự từ chuỗi
- 10. Lấy và xóa ký tự đầu tiên của chuỗi
- 11. std :: u16string, std :: u32string, std :: string, length(), size(), codepoints và ký tự
- 12. Cách chia chuỗi bằng x số ký tự
- 13. Lấy 4 ký tự cuối cùng của chuỗi
- 14. javascript - cách chia nhỏ chuỗi x số ký tự?
- 15. Đếm số lần xuất hiện ký tự trong một chuỗi
- 16. Xóa ký tự không phải số và không phải ký tự khỏi một chuỗi?
- 17. Tạo chuỗi ký tự chữ và số trong Ruby
- 18. Đếm số ký tự cụ thể trong chuỗi
- 19. Cách lấy các ký tự cuối cùng trong một chuỗi trong Java, bất kể kích thước chuỗi
- 20. GUID, chuỗi ký tự 30 ký tự
- 21. Làm cách nào để lấy số điểm mã cho một ký tự cụ thể trong chuỗi utf-8?
- 22. Điểm "& s [0]" có trỏ đến các ký tự tiếp giáp trong chuỗi std :: không?
- 23. Xác định std :: chuỗi trong C++ không có ký tự thoát
- 24. Ký tự dấu và ký tự trong chuỗi SQL
- 25. Trích đối số mẫu cho các chuỗi ký tự
- 26. Đối số chức năng truyền dưới dạng chuỗi ký tự?
- 27. Có cách nào nhanh chóng để lấy hai ký tự cuối cùng trong một chuỗi không?
- 28. Cách lấy vị trí của ký tự hoặc Chuỗi đã chọn trong EditText
- 29. Chuỗi ký tự và ký tự trong Java
- 30. Cố gắng chuyển các chuỗi ký tự dạng chuỗi làm đối số mẫu
Những loại dây bạn đang xử lý? std :: string? chuỗi C? null chấm dứt chuỗi? –
Cách chống lừa đảo nhất sẽ là để lặp qua nó và đếm các ký tự cho mình. Tuy nhiên, kích thước – Krythic