Trong trang này, chúng ta sẽ tìm hiểu chuỗi và chúng ta cũng thực hiện một số hoạt động hàm của C-string
String là gì?
Nói một cách đơn giản, một chuỗi là một chuỗi các ký tự hoặc một câu. Đó là, tên, tên địa điểm hoặc tin nhắn của một người có thể là một chuỗi, ví dụ: Rahul Sharma, Ấn Độ, Chào buổi sáng là những ví dụ về chuỗi.
C++ cung cấp hai loại chuỗi,
- Chuỗi kiểu C hoặc C
- Chuỗi C++
Chuỗi C
Chuỗi c là một mảng ký tự, dạng của một mảng đơn chiều. vì C++ là phiên bản cập nhật của C nên C++ cũng hỗ trợ tất cả các thư viện này. Ngoài ra, C++ cũng đã sở hữu thư viện chuỗi của nó.
tất cả các chương trình đã cho dưới đây là ví dụ về chức năng thư viện chuỗi C
khởi tạo chuỗi C trong C++
char string[ ] = "Rahul";
char string[6] = {'R','a','h','u','l',\0'};
char string[6] = "Rahul";
char *string = "Rahul"; // using pointer
trong đó chuỗi là mã định danh. Nếu một ký tự rỗng không được khởi tạo, trình biên dịch sẽ tự động thực hiện nó.
Chuỗi C++
Trong C ++ hiện đại, một lớp chuỗi mới đã được thêm vào bởi tiêu chuẩn ANSI / ISO C ++ được gọi là thư viện chuỗi C ++. Chuỗi này được thực hiện bởi lớp và đối tượng. Không cần kiểu dữ liệu. Ở đây lớp thay thế kiểu dữ liệu.
Hãy giải thích điều này ở đây,
cách chuỗi C ++ cải thiện chuỗi C và làm cho nó dễ dàng hơn. Có một sự khác biệt được đưa ra dưới đây giữa chuỗi C và chuỗi C ++.
Ở đây chuỗi được định nghĩa trước là một dạng lớp trong thư viện C ++ vì vậy trước tiên chúng ta luôn tạo đối tượng của nó,
string object; //string constructor with no arguments
trong đó một chuỗi là một lớp được xác định trước và đối tượng là một mã định danh. ở đây chúng ta chỉ truyền dữ liệu qua đối tượng. chẳng hạn như trong lớp,
string object("string"); // one arguments
Nó cũng hỗ trợ hành vi kiểu dữ liệu tích hợp,
string object = "string";
khi thực hiện thao tác chuỗi, cú pháp sau sẽ được sử dụng,
object.string-function(arguments);
trong đó hàm chuỗi là thành viên công khai của một lớp chuỗi.
Ngoài ra, lớp chuỗi chứa nhiều hàm tạo, hàm thành viên của lớp chuỗi, toán tử, bộ lặp để thực hiện các hoạt động. Vì vậy, để hiểu việc thực hiện một chuỗi, trước tiên bạn phải hiểu khái niệm về lớp, đối tượng, hàm tạo và kẻ hủy diệt.
✍ : Trong chuỗi C, chúng ta thực hiện các hoạt động trực tiếp bằng cách sử dụng hàm pr-defined của chúng không hạn chế lớp và đối tượng, trong khi tất cả các hoạt động trong chuỗi C ++ thực hiện thông qua các lớp và đối tượng. thực hiện cùng một nhiệm vụ theo một cách khác.
Turbo C++ (Borland Compiler, C++98) không hỗ trợ lớp chuỗi này và như đã đề cập C++ cũng hỗ trợ C-string, vì vậy C-string được đề cập ở đây.
Đừng nhầm lẫn trong cú pháp trên, một chuỗi là một định danh trong chuỗi C trong khi trong chuỗi C ++, một chuỗi sẽ là một lớp.
xem thư viện C++ hiện đại
Làm thế nào để đọc một chuỗi trong C ++?
Như chúng ta đã biết, câu lệnh được sử dụng để đọc đầu vào của người dùng, nhưng ở đây, chúng ta không thể sử dụng câu lệnh. Tại sao?cin
cin
Khi bạn sử dụng câu lệnh cin để lưu trữ một chuỗi, nó không cho phép, vì cin không đọc khoảng trắng. để đọc chuỗi trong C++, chúng ta sử dụng hàm and, nghĩa là,get()
getline()
Ví dụ: nếu chúng ta muốn lưu trữ tên “Rahul sherma” thì chỉ có “Rahul” sẽ lưu trữ trong câu lệnh cin trong khi và , cả hai sẽ lưu trữ tên đầy đủ.get()
getline()
Cú pháp của các câu lệnh này được đưa ra dưới đây,
gets(variable);
cin.getline(variable, size);
Dưới đây là một ví dụ trong đó chúng tôi lưu trữ một chuỗi có độ dài đầy đủ trong C ++.
Cả hai hàm đều được định nghĩa trong tệp tiêu đề , vì vậy trong một chương trình, chúng ta phải bao gồm tệp tiêu đề của chúng ().stdio
stdio.h
Sử dụng chuỗi
- Không có tuyên bố bổ sung nào phải được viết trong chương trình. Vì vậy, khả năng đọc của chương trình vẫn còn.
- Bởi vì khả năng đọc của chương trình vẫn còn, vì vậy nó trở nên dễ dàng để gỡ lỗi chương trình.
- Bởi vì mã dòng bổ sung giảm, kích thước của chương trình cũng giảm.
- Trong một chương trình, chúng ta sử dụng hàm thư viện chuỗi của chuỗi, giúp tiết kiệm thời gian.
✍ : không có chuỗi, chúng ta có thể thực hiện nhiệm vụ liên quan đến chuỗi nhưng nó trở nên phức tạp.
Rất nhiều hàm chuỗi đã được định nghĩa trong thư viện chuỗi. Một số tên hàm quan trọng này và nhiệm vụ của chúng được đưa ra trong bảng dưới đây,
Chức năng thư viện chuỗi C
Chức năng | Hoạt động |
---|---|
strlen(str) | Trả về độ dài của str, trừ ‘\0′ |
strcmp(str1, str2) | So sánh hai chuỗi |
stricmp(str1, str2) | So sánh hai chuỗi không phân biệt chữ hoa chữ thường |
strncmp(str1, str2, n) | So sánh n ký tự của mỗi chuỗi |
strnicmp(str1, str2, n) | So sánh n ký tự của mỗi chuỗi không có phân biệt chữ hoa chữ thường |
strcpy(str1, str2) | Sao chép chuỗi str2 sang str1 |
strncpy(str1, str2, n) | Sao chép n ký tự từ chuỗi str2 vào str1. |
strcat(str1, str2) | Nối str2 vào str1 |
strncat(str1, str2, n) | Nối n ký tự của một chuỗi str2 vào chuỗi thứ hai str1 |
strcspn(str1, str2) | Trả về số ký tự liên tiếp ban đầu của str1 không có trong str2 |
strspn(str1, str2) | Trả về số ký tự liên tiếp ban đầu của str1 nằm trong str2 |
strlwr(str) | Chuyển đổi chuỗi chữ thường thành chữ hoa |
strupr(str) | Chuyển đổi chuỗi chữ thường thành chữ hoa |
strchr(str1, c) | quét str1 theo hướng chuyển tiếp để tìm một ký tự cụ thể c |
strrchr(str1, c) | quét str1 theo hướng ngược lại để tìm một ký tự cụ thể c |
strdup(str) | Sao chép chuỗi vào vị trí mới tạo |
strrev(str) | Đảo ngược một chuỗi theo thứ tự ngược lại ngoại trừ ‘\0’. |
strstr(str1, str2) | Quét chuỗi con str2 trong str1. |
Một số chức năng này như sau,
Chương trình strlen trong C ++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str= "rahul singh";
int str_len;
//calculating string length by strlen
str_len = strlen(str);
cout<<"size: "str_len;
return 0;
}
RA
size: 11
chương trình strcmp trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str1[] = "Rahul"; //*str1
char str2[] = "rahul"; //*str2
if(strcmp(str1,str2)==0)
cout<<"string Matched";
else
cout<<"string not matched";
return 0;
}
RA
string not matched
Chương trình stricmp trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str1[] = "Rahul"; //*str1
char str2[] = "rahul"; //*str2
if(stricmp(str1,str2)==0) //compare string without case sensitivity
cout<<"Matched..";
else
cout<<"Not Matched..";
return 0;
}
RA
Matched..
chương trình strncmp trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str1[] = "Rahul"; //*str1
char str2[] = "Rahul singh"; //*str2
if(strncmp(str1,str2,4)==0) // compare only first 5 characters
cout<<"Matched..";
else
cout<<"Not Matched..";
return 0;
}
RA
Matched..
Chương trình strnicmp trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
//different string
char *str1 = "Rahul"; //str1[]
char *str2 = "rahul"; //str2[]
if(strnicmp(str1,str2,4)==0) // compare only first 5 characters
cout<<"Matched..";
else
cout<<"Not Matched..";
return 0;
}
RA
Matched..
Chương trình strcpy trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str1 = "Rahul";
char *str2;
strcpy(str2,str1); //copy str1 to str2
cout<<"str1: "<<str1<<"\n";
cout<<"str2: "<<str2;
return 0;
}
RA
str1: Rahul
str2: Rahul
Chương trình strncpy trong C ++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str1[] = "Rahul Singh sherma";
char *str2;
strncpy(str2,str1,11); //copy only first 11 characters str1 to str2
cout<<"str1: "<<str1<<"\n";
cout<<"str2: "<<str2;
}
RA
str1: Rahul Singh sherma
str2: Rahul Singh
Chương trình strcat trong C++
#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
char *str1 = "Rahul";
char *str2 = " ";
char *str3 = "Singh";
//append all str2 and str3 to str1
strcat(str1, str2);
strcat(str1, str3);
cout<<"str1: "<<str1;
return 0;
}
RA
str1: Rahul Singh
Chương trình strncat trong C++
Trong *str3 sherma sẽ được bỏ qua
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str1 = "Rahul";
char *str2 = " ";
char *str3 = "Singh sherma";
//append 1 character from str2 into str1
strncat(str1,str2,1);
//append only first 5 characters from str3 into str1 also
strncat(str1,str3,5);
//
cout<<str1;
return 0;
}
RA
str1: Rahul Singh
chương trình strspn trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str1 = "rahul singh";
char *str2 = "rahul sherma";
int len;
len = strspn(str1, str2);
cout<<"Character where strings different is at position: "<<len;
return 0;
}
RA
Character where strings different is at position: 7
Chương trình strscpn trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main(void)
{
char *str1 = "Rahul";
char *str2 = "rahul";
int len;
len = strcspn(str1, str2);
cout<<"Character where strings different is at position: "<<len;
return 0;
}
RA
Character where strings different is at position: 1
Chương trình strlwr trong C++
#include<iostream.h>
#include<string.h>
using namespace std;
int main()
{
char *str= "RAHUL SINGH";
char *str_lwr;
//convert string into lower case by strlwr
str_lwr = strlwr(str);
cout<<str_lwr;
return 0;
}
RA
rahul singh
chương trình strupr trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str= "rahul singh";
char *str_upr;
//convert string into upper case by strupr
str_upr = strupr(str);
cout<<str_upr;
return 0;
}
RA
RAHUL SINGH
chương trình strchr trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str1 = "Rahul singh";
char *str2, c = 'i';
//scan str1 in the forward direction for a character i
str2= strchr(str1,c);
if(str2)
cout<<"Character "<<c<<" Found at positition: "<<str2-str1;
else if(!str2)
cout<<"Not Found";
return 0;
}
RA
Character i Found at position: 7
chương trình strrchr trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
clrscr();
char *str1 = "Rahul singh";
char *str2, c = 'i';
//scan str1 in the reverse direction for a character i
str2= strrchr(str1,c);
if(str2)
cout<<"Character "<<c<<" Found at postition: "<<str2-str1;
else if(!str2)
cout<<"Not Found";
return 0;
}
RA
Character i Found at position: 7
Chương trình strdup trong C++
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *str= "rahul", *dup_str;
//copy str into newly created location dup_str
dup_str = strdup(str);
cout<<dup_str;
// freeing the space allocated by strdup
delete dup_str;
return 0;
}
RA
rahul
Chương trình strrev trong C ++
#include<iostream.h>
#include<string.h>
using namaespace std;
int main()
{
char *str = "rahul singh";
cout<<"Before reverse: "<<str<<endl;
//reverse a string by strrev
strrev(str);
cout<<"After reverse : "<<str;
}
RA
Before reverse: Rahul Singh
After reverse : hginS luhaR
Chương trình strstr trong C++
#include<iostream.h>
#include<string.h>
using namespace std;
int main()
{
char *str1 = "Rahul singh";
char *str2 = "sin";
//scan the str1 in the reverse direction for substring str2 by strstr
str2= strstr(str1,str2);
if(str2)
cout<<"string "<<str2<<" Found at postition: "<<str2-str1;
else if(!str2)
cout<<"Not Found";
}
RA
string sin Found at position: 6
Hãy thử với một ví dụ thực tế dưới đây,
ví dụ thực tế o strcmp trong C ++
Chương trình này được thiết kế theo một cách hơi khác. Chương trình này sẽ hoạt động giống như một hệ thống nhật ký, trong đó người dùng được yêu cầu nhập mật khẩu. Trong đó, chúng tôi đã so sánh cả hai mật khẩu (nhập mật khẩu của người dùng và mật khẩu thực) với nhau từ strcmp.
#include<iostream>
#include<stdlib> //getline)(
#include <string.h>
using namespace std;
int main()
{
start: // goto statement used
char psd[10];
char pwd[10]="password";
cout<<"Enter Password: ";
cin.getline(psd,10);
if(strcmp(psd,pwd)==0)
{
cout<<"Matched..\n\n\t";
system("pause"); // pause display screen with a message
} else {
cout<<"Try again..";
goto start; // transfer control if condition false
}
}
RA
Enter Password: password
Matched..
press any key to continue.
sự khác biệt giữa chuỗi C và chuỗi C ++
Chuỗi C hoặc mảng ký tự C ++ | Chuỗi C++ |
---|---|
C-string là một dạng của một Mảng, chuỗi kiểu dữ liệu char. Vì vậy, nó còn được gọi là mảng ký tự. | Chuỗi C++ là một lớp được định nghĩa trước trong Thư viện chuẩn C++ do ANSI thêm vào. |
Khai báo chuỗi C- sẽ như sau,
trong đó là kiểu dữ liệu và str là định danh được gọi là biến.char str[size];char |
Chuỗi C++ sẽ được khai báo là, trong đó chuỗi là một lớp,
đã được định nghĩa trong Thư viện chuẩn C++ và str là một đối tượng của lớp chuỗi.string str; // empty string |
khởi tạo chuỗi C sẽ như sau. char str[size] = “string”; |
trong khi chuỗi C++ sẽ như sau, string str = “string”; |
Giống như một mảng, nó sử dụng một giá trị chỉ mục để truy cập một ký tự duy nhất. Không yêu cầu chức năng được xác định trước. str[n]; |
Nó có một hàm được xác định trước để truy cập một ký tự duy nhất từ một chuỗi. str.at(n); |
Bởi vì đây là dạng của một mảng và mảng là kiểu dữ liệu dẫn xuất. Vì vậy, nó cũng là một kiểu dữ liệu dẫn xuất. | Chuỗi là lớp và lớp là kiểu dữ liệu do người dùng xác định nhưng không phải vậy. Mặc dù, chúng hoạt động giống như kiểu dữ liệu tích hợp. như đã nêu ở trên. |
Toán tử tiêu chuẩn không thể áp dụng với mảng ký tự. char str1[ ]+ char str2[];// not possible char str[] = str2[]; // not possible |
toán tử có thể áp dụng với chuỗi C++. str1+ str2; // possible str1 = str2; // possible |
Mảng ký tự được lưu trữ trong vị trí bộ nhớ String Constant Pool là một phần của bộ nhớ Heap. | chuỗi, được lưu trữ trong vị trí bộ nhớ Heap. |