String Trong C++ – Techacademy

Cùng khám phá về kiểu tài liệu string trong C + +. Bạn sẽ biết khái niệm string là gì trong C + +, cách khai báo string trong C + +, cách khởi tạo string trong C + +, cách gán string trong C + + cũng như cách truy xuất ký tự của string. Bạn cũng sẽ biết sự độc lạ giữa mảng ký tự và string trong C + + sau bài học kinh nghiệm này .

Tóm Tắt

I. String Trong C + + Là Gì

Trong ngôn từ C + +, có một kiểu tài liệu gọi là kiểu char ( kiểu ký tự ) ( char là viết tắt của character ). Đây là kiểu tài liệu có size bộ nhớ là 1 byte. Vì 1 byte là đơn vị chức năng nhỏ nhất nên hoàn toàn có thể nói char là loại có size bộ nhớ nhỏ nhất .
Khi tất cả chúng ta nối những ký tự ( char ) trong C + + lại với nhau thì sẽ được 1 chuỗi ký tự. Ví dụ như “ Hello ” là 1 chuỗi ký tự được tạo bởi những ký tự đơn ví dụ điển hình .

Và chúng ta gọi loại dữ liệu được tạo thành bởi tập hợp những ký tự đơn như vậy là kiểu dữ liệu string trong C++ hay còn gọi là chuỗi string trong C++.

Bạn đang đọc: String Trong C++ – Techacademy

Để giải quyết và xử lý chuỗi string trong C + +, tất cả chúng ta hoàn toàn có thể dùng đến mảng ký tự được thừa kế từ ngôn từ C, hoặc là sử dụng tới std :: string là một trình bảo phủ để giải quyết và xử lý chuỗi thuận tiện mới được thêm vào C + +. Về chiêu thức sử dụng string trong c + + bằng mảng ký tự thì Kiyoshi đã nghiên cứu và phân tích rất kỹ trong loạt bài tại chuyên đề Chuỗi trong C rồi .
String Trong C++ Là Gì

II. Nhập String Trong C + +

Hướng dẫn cách nhập xuất string trong C + +. Bạn sẽ học được cách sử dụng lệnh cin, cout cũng như hàm getline ( ) để nhập xuất string trong C + + sau bài học kinh nghiệm này .

Nhập xuất string trong C + + *

Giống như việc nhập những loại tài liệu khác, tất cả chúng ta sử dụng lệnh cin để nhập vào một string trong C + + với cú pháp sau đây :

string str;
cin >> str

Trong đó dòng tiên phong dùng để khai báo biến str có kiểu string, và dòng thứ 2 dùng để gán dữ liệu nhập từ bàn phím vào biến str .
Tương tự, tất cả chúng ta sử dụng lệnh cout để xuất vào một string trong C + + với cú pháp sau đây :

cout >> str

Ví dụ, tất cả chúng ta viết chương trình nhập xuất string trong C + + như sau :

#include 
#include 
using namespace std;
 
int main() {
    cout << "Nhap chuoi ky tu: ";
 
    string str;
    cin >>   str;
 
    cout <<"Chuoi ky tu vua nhap: "<< str;
 
    return 0;
}

Khi đó màn hình hiển thị nhập tài liệu sẽ như sau :

Nhap chuoi ky tu: abcdd
Chuoi ky tu vua nhap: abcdd

Nhập nhiều string trong C + +

Để nhập nhiều string trong C + + cách nhau bởi dấu cách, tất cả chúng ta viết những string nhập vào cách nhau bởi toán tử >>, khi dùng lệnh cin với cú pháp sau đây :

string str1, str1, str3;
cin >> str1 >> str2 >>str3 ;

Ví dụ, tất cả chúng ta viết chương trình nhập nhiều string trong C + + như sau :

#include 
#include 
using namespace std;
 
int main(){
    cout << "Nhap cac chuoi: ";
    string str1, str2, str3;
    cin >> str1 >> str2 >>str3 ;
    cout <<"Cac chuoi vua nhap: "<
Khi đó màn hình hiển thị nhập tài liệu sẽ hiện ra. Chúng ta nhập từng string cách nhau bởi dấu cách từ bàn phím như sau :
Nhap cac chuoi: ab cd123 ef8
Cac chuoi vua nhap: ab cd123 ef8

Nhập String Trong C++

III. Các Hàm String Trong C + +

Thư viện rất nhiều hàm cho phép xử lý chuỗi. Ví dụ: tìm chiều dài chuỗi, so sánh hai chuỗi, tìm kiếm/rút trích chuỗi con, nối chuỗi,…

Hàm s.length ( )

Trả về số lượng ký tự trong string s .

string s1 = "introduction to programming";
cout<<"length of s1 = "<

Hàm s.substr ( x, y )

Rút trích một chuỗi con với chiều dài y mở màn tại vị trí x. Nếu không có y, một chuỗi con từ vị trí x tới cuối chuỗi sẽ được rút trích .
string s1 = "introduction to programming";
cout<<"substring has 10 characters of s1 start at 5:"<

Hàm s.find ( r )

Kiểm tra chuỗi string r có Open trong chuỗi s hay không. Nếu có thì trả về vị trí mở màn Open chuỗi r trong chuỗi s .
string s1 = "introduction to programming";
cout<<"position of 'duc' string in s1:"<

Hàm s.erase ( x, n )

Xóa n ký tự khởi đầu tại vị trí x .
string s1 = "introduction to programming";
s1.erase(5, 15);
cout<<"s1 string after erase:"<

Hàm s.replace ( x, n, str )

Thay thế n ký tự tại vị trí khởi đầu là x bằng chuỗi str. Lưu ý : chiều dài của str hoàn toàn có thể lớn hơn n .
string s1 = "introduction to programming";
s1.replace(5, 10, "123123123");
cout<<"s1 string after replace:"<

Hàm s1.compare ( s2 )

So sánh chuỗi s1 với s2. Giá trị trả về là - 1 nếu s1 < s2, bằng 0 nếu s1 = = s2, là 1 nếu s1 > s2 .
string s1 = "introduction to programming";
string s2 = "c++ programming language";
cout<<"s1 compare s2:"<

Hàm s1.swap ( s2 )

Hoán đổi nội dung hai chuỗi .
string s1 = "introduction to programming";
string s2 = "c++ programming language";
s1.swap(s2);
cout<<"s1 after swap:"<

Hàm s1.insert ( index, s2 )

Thêm chuỗi s2 vào s1 sau vị trí index .
string s1 = "introduction to programming";
string s2 = "c++ programming language";
s1.insert(10, s2);
cout<<"s1 after insert s2:"<
Các Hàm String Trong C++

IV. Tính Độ Dài String Trong C + +

Hướng dẫn cách lấy độ dài string trong C + +. Bạn sẽ học được cách dùng hàm size và hàm length để lấy độ dài string trong C + + sau bài học kinh nghiệm này .

Độ dài string trong C + + là gì

Độ dài string trong C + + chính là số ký tự chứa trong string đó. Độ dài string trong C + + hoàn toàn có thể lấy được bằng cách chia size của string cho size 1 thành phần trong string đó .
Độ dài string (số phần tử) = [Kích thước string] / [Kích thước kiểu char]

Do thành phần tạo nên string là những ký tự thuộc dạng char với size là 1 byte, nên thường thì, tất cả chúng ta coi độ dài string trong C + + chính bằng kích cỡ của string đó .

Lấy độ dài string trong C + + bằng hàm size và hàm length

Do thường thì độ dài string trong C + + chính bằng kích cỡ của string đó, nên bằng giải pháp tính ra size string thì tất cả chúng ta hoàn toàn có thể thu về ngay độ dài của string đó .
Và để tính size string trong C + +, tất cả chúng ta sẽ sử dụng một trong hai hàm đã học tại bài Lấy size string trong C + + .
Cách lấy độ dài string trong C + + như những ví dụ sau đây :
Ví dụ 1 : lấy độ dài string trong C + + bằng hàm size

#include 
#include 
using namespace std;

int main ()
{
    string str("Hello world");
    cout<<"Do dai string = kich thuoc string = ",str.size()<
Ví dụ 1 : lấy độ dài string trong C + + bằng hàm length
#include 
#include 
using namespace std;

int main ()
{
    string str("Hello world");
    cout<<"Do dai string = kich thuoc string = "<

Trường hợp độ dài string khác với số ký tự có trong string

Ở phần trên tất cả chúng ta đã biết với những chuỗi được tạo thành bởi những ký tự được màn biểu diễn bởi 1 mã ký tự, do kích cỡ của những ký tự như vậy cũng là 1 byte, nên hiệu quả tính độ dài string bằng 2 hàm size và length cũng chính là số ký tự có trong string đó . Tuy nhiên trong trường hợp chuỗi được tạo ra bởi những ký tự được màn biểu diễn bởi 2 mã ký tự như là tiếng Việt có dấu, hay kanji tiếng Nhật ví dụ điển hình, thì độ dài string sẽ lớn hơn số ký tự có trong string. Ví dụ :
#include 
#include 
using namespace std;

int main ()
{
    string str("Hà Nội");
    cout<
Kết quả :
9
6

Có thể thấy rõ độ dài chuỗi trong những trường hợp này sẽ lớn hơn số ký tự có trong chuỗi đó .
Bởi vậy lúc dùng 2 hàm này để lấy số ký tự có trong string, cần rất là chú ý quan tâm trong trường hợp sống sót ký tự được tạo thành bởi 2 mã ký tự như trên .
Tính Độ Dài String Trong C++

V. Cắt String Trong C + +

Hướng dẫn giải pháp cắt string trong C + +. Bạn sẽ học được cách sử dụng 3 hàm cơ bản như front ( ), back ( ) và substr ( ) để cắt string trong C + + sau bài học kinh nghiệm này .
Chúng ta có 3 chiêu thức cơ bản để cắt string trong C + + như sau :

  • Hàm front(): Cắt ký tự trước tiên từ string
  • Hàm back(): Cắt ký tự cuối cùng từ string
  • Hàm substr(): Cắt một phạm vi từ string

Cắt ký tự thứ nhất từ string trong C + + bằng hàm front

Hàm front là 1 hàm thành viên trong class std : string, có tính năng tham chiếu tới ký tự tiên phong trong chuỗi string .
Bằng cách ứng dụng hàm front ( ), tất cả chúng ta không những hoàn toàn có thể cắt ra giá trị của ký tự tiên phong trong string, mà còn hoàn toàn có thể đổi khác giá trị của ký tự tiên phong đó .
Chúng ta sử dụng hàm front trong C + + với cú pháp sau đây :

str.front();

Trong đó str là chuỗi string cần cắt ra ký tự khởi đầu. Hàm front ( ) sẽ trả về tham chiếu tới ký tự tiên phong của chuỗi string, qua đó tất cả chúng ta hoàn toàn có thể cắt lấy giá trị của ký tự tiên phong này, hoặc là gán một ký tự khác để biến hóa nó .
Lưu ý tất cả chúng ta không dùng hàm front ( ) cho chuỗi string trống nhé .
Ví dụ đơn cử :

#include 
#include 
using namespace std;
 
int main() {
    string str = "Hello World!";
    
    //Tạo tham chiếu tới vị trí ký tự đầu tiên của chuỗi string
    char frontstr = str.front();
    cout << frontstr << endl;
    
    //Thay đổi ký tự đầu tiên
    str.front() = 'K';
    cout << str << endl;
 
    return 0;
}

Kết quả :

H
Kello World!

Cắt ký tự ở đầu cuối từ string trong C + + bằng hàm back

trái lại với hàm front ( ) chính là hàm back ( ) .
Hàm back là 1 hàm thành viên trong class std : string, có tính năng tham chiếu đến ký tự ở đầu cuối trong chuỗi string .
Bằng cách ứng dụng hàm back ( ), tất cả chúng ta không những hoàn toàn có thể cắt ra giá trị của ký tự tiên phong trong string, mà còn hoàn toàn có thể đổi khác giá trị của ký tự sau cuối đó .
Chúng ta dùng hàm back trong C + + với cú pháp sau đây :

str.back();

Trong đó str là chuỗi string cần cắt ra ký tự sau cuối. Hàm back ( ) sẽ trả về tham chiếu tới ký tự sau cuối của chuỗi string, qua đó tất cả chúng ta hoàn toàn có thể cắt lấy giá trị của ký tự sau cuối này, hoặc là gán một ký tự khác để biến hóa nó .
Lưu ý tất cả chúng ta không dùng hàm back ( ) cho chuỗi string trống nhé .
Ví dụ đơn cử :

#include 
#include 
using namespace std;
 
int main() {
    string str = "Hello World!";
    
    //Tạo tham chiếu tới vị trí ký tự cuối cùng của chuỗi string
    char backstr = str.back();
    cout << backstr << endl;
    
    //Thay đổi ký tự cuối cùng.
    str.back() = '?';
    cout << str << endl;
 
    return 0;
}

Kết quả :

!
Hello World?

Cắt một khoanh vùng phạm vi từ string bằng hàm substr ( )

Chúng ta sử dụng hàm substr ( ) để cắt một khoanh vùng phạm vi chỉ định từ trong string bắt đầu. Ví dụ đơn cử :

#include 
#include 
using namespace std;
 
int main() {
    string str = "Hello World!";
    string substr = str.substr(1, 3);
    cout << substr << endl;

    string substr2 = str.substr(1,6); 
    cout << substr2 << endl;
    return 0;
}

Kết quả, các chuỗi string được cắt trong phạm vi chỉ định như sau:

ell
ello W

Cắt String Trong C++

VI. Nối Chuỗi String Trong C + +

Bài tập C + + : Nối chuỗi trong C + +

Đề bài : Viết chương trình C + + để nối 2 chuỗi trong C .
Bài tập C + + này có nhiều cách gọi : trộn hai chuỗi, nối hai chuỗi, ghép hai chuỗi hay cộng hai chuỗi, … Dù có nhiều cách gọi khác nhau đi chăng nữa thì đây cũng chỉ là một bài tập để nối ghép những ký tự của hai chuỗi để thành một chuỗi duy nhất .

Lời giải ( không sử dụng hàm )

Để giải bài tập C + + này, bạn sử dụng hàm strlen ( ) để tìm độ dài chuỗi. Sử dụng vòng lặp để lặp qua toàn bộ ký tự của chuỗi .
Dưới đây là chương trình C + + để giải bài tập nối chuỗi trong C + + :

#include 
#include 
 
int main() {
   char s1[10] = "VietTuts";
   char s2[] = ".Vn";
     
   int i, j, n1, n2;
     
   n1 = strlen(s1);
   n2 = strlen(s2);
     
   j=0;
   for(i = n1; i
Chạy chương trình C + + trên cho hiệu quả như sau :
Nối Chuỗi String Trong C++

Lời giải ( sử dụng hàm )

Bạn hoàn toàn có thể triển khai nối hai chuỗi thành một chuỗi bởi sử dụng những hàm strcpy ( ) và strcat ( ) trong C . Giả sử bạn cần nối hai chuỗi là str1 và str2. Bạn cần khai báo thêm một chuỗi str3 có độ dài bằng tổng độ dài của str1 và str2. Sau đó : Sử dụng hàm strcpy ( str3, str1 ) để sao chép chuỗi str1 vào str3 . Sử dụng hàm strcat ( str3, str2 ) để nối chuỗi str2 với str1 vừa được sao chép . Dưới đây là chương trình C + + để giải bài tập nối chuỗi trong C + + :
#include
#include
 
int main() {
   char str1[100];
   char str2[100];
   char str3[100];
   int len;
  
   printf("Nhap chuoi 1: ");
   gets(str1);
  
   printf("Nhap chuoi 2: ");
   gets(str2);
  
   strcpy(str3, str1);
   strcat(str3, str2);
  
   printf("\nNoi chuoi: %s", str3);
  
   return (0);
}

VII. So Sánh 2 String Trong C + +

Bài tập C + + : So sánh hai chuỗi trong C + +

Đề bài : Viết chương trình C + + để sa sánh hai chuỗi .
Yêu cầu bài tập C + + này là so sánh xem hai chuỗi có giống hệt ( giống nhau ) hay không. Để giải bài tập C + + này bạn cần sử dụng vòng lặp để duyệt qua tổng thể những ký tự của hai chuỗi và kiểm tra từng ký tự tương ứng với chỉ mục có giống nhau không .

Lời giải

Dưới đây là chương trình C + + để giải bài tập so sánh 2 chuỗi trong C + + :

#include 
 
int main() {
   char s1[50];     
   char s2[50];
    
   int n = 0;
   short flag = 1;
    
    printf("Nhap chuoi s1: ");
    gets(s1);
    printf("Nhap chuoi s2: ");
    gets(s2);
     
   // so sanh chuoi s1 voi s2
   while (s1[n] != '\0') {
      if(s1[n] != s2[n]) {
         flag = 0;
         break;
      }
      n++;
   }
     
   if(flag == 1) {
      printf("Chuoi %s va chuoi %s la giong nhau.", s1, s2);
   }else {
      printf("Chuoi %s va chuoi %s la khac nhau.", s1, s2);
   }
 
   return 0;
}

So Sánh 2 String Trong C++

VIII. Xóa 1 Ký Tự Trong String C + +

Hướng dẫn cách xóa string trong C + +. Bạn sẽ học được cách sử dụng những hàm như hàm pop_back, hàm erase để xóa string trong C + + sau bài học kinh nghiệm này .
Chúng ta có 3 giải pháp để xóa string trong C + + như sau :

  • Hàm pop_back : Xóa ký tự cuối cùng trong string
  • Hàm erase: Xóa ký tự tại vị trí chỉ định
  • Hàm erase(first, last): Xóa các ký tự trong phạm vi chỉ định

Xóa ký tự ở đầu cuối trong string C + + bằng pop_back

Hàm pop_back là một hàm thành viên trong class std : string, có công dụng xóa ký tự ở đầu cuối trong string cũng như giảm độ dài của nó đi một đơn vị chức năng .
Cú pháp sử dụng hàm pop_back để xóa ký tự sau cuối trong string như sau :

str.pop_back();

Trong đó str là tên string cần xóa ký tự sau cuối. Lưu ý là ký tự ở đầu cuối ở đây không gồm có ký tự kết thúc chuỗi \ 0 .
Hàm pop_back thuộc kiểu void, do đó nó sẽ không trả giá trị. Bởi vậy nó sẽ xóa ký tự ở đầu cuối trong string chứ không trả về ký tự đó. Trong trường hợp muốn lấy ký tự sau cuối trong string, hãy sử dụng tới hàm back để thay thế sửa chữa .
Ví dụ đơn cử :

#include 
#include 

int main ()
{
  std::string str ("Hello world");
  str.pop_back();
  std::cout << str;
  return 0;
}
//> Hello worl

Có thể thấy ký tự ở đầu cuối trong chuỗi là ký tự d đã bị xóa khỏi chuỗi bắt đầu .

Xóa 1 ký tự trong string bằng hàm erase

Hàm erase là một hàm thành viên trong class std : string, có công dụng xóa một hoặc nhiều ký tự trong string C + + cũng như làm giảm độ dài tương ứng của nó .
Để xóa 1 ký tự tại vị trí chỉ định trong string C + + bằng hàm erase tất cả chúng ta sử dụng cú pháp sau đây :

str.erase(p);

Ở đây trình lặp ( iterator ) là một vòng lặp có tính năng giống như con trỏ, giúp truy vấn đến những ký tự ở vị trí đơn cử trong string .
Trong trường hợp cần chỉ đến vị trí index thứ n trong string, tất cả chúng ta sẽ viết trình lặp p như sau :
str.begin ( ) + i
Trong đó str.begin ( ) chỉ đến vị trí tiên phong trong string, và i là index của vị trí ký tự cần chỉ đến .
Kết hợp lại thì công thức để xóa 1 ký tự vào vị trí chỉ định trong string C + + bằng hàm erase sẽ như sau :

str.erase(str.begin() + i);

Ví dụ đơn cử :

#include 
#include 
using namespace std;
int main ()
{
    string str("Hello World");
    str.erase(str.begin() + 2);//Xóa ký tự ở vị trí thứ 2
    cout << str<
Kết quả :
Helo World
Helo Wrld

Xóa những ký tự trong một khoanh vùng phạm vi chỉ định trong string C + +

Chúng ta sử dụng hàm erase để xóa những ký tự trong một khoanh vùng phạm vi chỉ định trong string C + + với cú pháp sau đây :

str.erase( iterator_first, iterator_last);

Trong đó str là chuỗi bắt đầu, iterator_first và iterator_last là khoanh vùng phạm vi cần xóa được chỉ định trong trình lặp trỏ đến vị trí cần xóa trong string .
Tương tự như khi xóa 1 ký tự thì cú pháp sử dụng thực tiễn để xóa những ký tự trong một khoanh vùng phạm vi chỉ định trong string C + + bằng hàm erase sẽ là :

str.erase(str.begin() + start, str.begin() + end);

Trong đó start và end là vị trí index của khoanh vùng phạm vi xóa trong string .
Ví dụ đơn cử :

#include 
#include 
using namespace std;
int main ()
{
    string str("Hello World");

    //Xóa ký tự trong phạm vi index từ 1 đến 3
    str.erase(str.begin() + 1, str.begin() + 3);
    cout << str<
Kết quả :
Hlo World
Hlorld

Xóa 1 Ký Tự Trong String C++

IX. Bài Tập Về String Trong C + +

C + + cung ứng hai kiểu trình diễn chuỗi như sau :
Chuỗi theo phong thái của ngôn từ C ( C-style ) ,
Lớp Chuỗi ( String ) được ra mắt trong C / C + + chuẩn .

Chuỗi theo phong thái C

Dạng chuỗi này bắt nguồn từ ngôn từ C và liên tục được tương hỗ trong C / C + +. Chuỗi trong ngôn từ lập trình C thực ra là mảng một chiều của những ký tự mà kết thúc bởi một ký tự null ‘ \ 0 ’ .
Phần khai báo và khởi tạo dưới đây tạo ra một chuỗi gồm có một từ “ Hello ”. Để giữ những giá trị null tại cuối của mảng, cỡ của mảng những ký tự gồm có một chuỗi phải nhiều hơn số lượng những ký tự trong từ khóa “ Hello ” .

char loiChao[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Nếu bạn theo quy tắc khởi tạo những chuỗi, bạn hoàn toàn có thể viết lệnh như sau :

char loiChao[] = "Hello";

Dưới đây là phần trình diễn ô nhớ cho đoạn chuỗi trên trong ngôn từ C / C + + :
Bài Tập Về String Trong C++
Thực tế, bạn không đặt ký tự null tại vị trí sau cuối của biến hằng số. Bộ biên dịch C tự động hóa thêm ‘ \ 0 ’ tại ví trí ở đầu cuối của chuỗi khi nó khởi tạo chuỗi. Cùng thử ví dụ in ra chuỗi sau đây :

#include 

using namespace std;

int main ()
{
   char loiChao[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

   cout << "Khi gap nhau, chung ta noi: ";
   cout << loiChao << endl;

   return 0;
}

Khi đoạn code trên được biên dịch và triển khai, hiệu quả in ra sẽ như sau :

Khi gap nhau, chung ta noi: Hello

Ngôn ngữ C / C + + tương hỗ nhiều hàm phong phú để thao tác những chuỗi kết thúc là null :

STT Hàm & Mục đích
1 strcpy(s1, s2);Sao chép chuỗi s2 cho chuỗi s1.
2 strcat(s1, s2);Nối chuỗi s2 vào cuối chuỗi s1.
3 strlen(s1);Trả về độ dài của chuỗi s1.
4 strcmp(s1, s2);Trả về 0 nếu s1 và s2 là như nhau; nhỏ hơn 0 nếu s1s2.
5 strchr(s1, ch);Trả về con trỏ tới vị trí đầu tiên của ch trong s1.
6 strstr(s1, s2);Trả về con trỏ tới vị trí đầu tiên của chuỗi s2 trong chuỗi s1.

Dưới đây là ví dụ cho việc sử dụng một vài hàm bên trên :

#include 
#include 

using namespace std;

int main ()
{
   char chuoi1[10] = "Hello";
   char chuoi2[10] = "Christmas";
   char chuoi3[10];
   int  len ;

   // sao chep chuoi1 vao trong chuoi3
   strcpy( chuoi3, chuoi1);
   cout << "strcpy( chuoi3, chuoi1) : " << chuoi3 << endl;

   // noi hai chuoi: chuoi1 va chuoi2
   strcat( chuoi1, chuoi2);
   cout << "strcat( chuoi1, chuoi2): " << chuoi1 << endl;

   // tong do dai cua chuoi1 mot sau khi thuc hien noi chuoi
   len = strlen(chuoi1);
   cout << "Dung ham strlen(chuoi1) de tinh do dai chuoi1: " << len << endl;

   return 0;
}

Chạy chương trình C / C + + trên sẽ cho hiệu quả như hình sau :
Bài Tập Về String Trong C++

Lớp String trong C / C + +

Thư viện chuẩn C / C + + phân phối một kiểu lớp String mà tương hỗ tổng thể hoạt động giải trí tương quan tới chuỗi đã đề cập ở trên, và bổ trợ thêm nhiều tính năng nữa. Chúng ta sẽ học lớp này trong Thư viện chuẩn C / C + + ( C + + Standard Library ), nhưng lúc này, tất cả chúng ta xem xét ví dụ sau :

Lúc này, có thể bạn không hiểu ví dụ này, bởi vì chúng ta chưa bàn luận về Lớp và Đối tượng trong C/C++. Vì thế, bạn quan sát và ghi nhớ chúng tới khi bạn đã hiểu các khái niệm về Hướng đối tượng được trình bày ở chương sau đó.

#include 
#include 

using namespace std;

int main ()
{
   string chuoi1 = "Hello";
   string chuoi2 = "Christmas";
   string chuoi3;
   int  len ;

   // sao chep chuoi1 vao trong chuoi3
   chuoi3 = chuoi1;
   cout << "Bay gio chuoi3 la: " << chuoi3 << endl;

   // noi hai chuoi: chuoi1 va chuoi2
   chuoi3 = chuoi1 + chuoi2;
   cout << "chuoi1 + chuoi2 co ket qua la: " << chuoi3 << endl;

   // tong do dai cua chuoi3 mot sau khi thuc hien noi chuoi
   len = chuoi3.size();
   cout << "Tinh do dai voi ham chuoi3.size() :  " << len << endl;

   return 0;
}

Chạy chương trình C / C + + trên sẽ cho hiệu quả như hình sau :
Bài Tập Về String Trong C++

X. Chuẩn Hóa String Trong C + +

Chuẩn hóa chuỗi trong C

Ý tưởng chuẩn hóa chuỗi trong C như sau :

  1. Bỏ các ký tự khoảng trắng thừa ở đầu chuỗi
  2. Bỏ các ký tự khoảng trắng thừa ở cuối chuỗi
  3. Viết hoa chữ cái đầu tiên của chuỗi
  4. Bỏ qua các khoảng trắng thừa ở giữa
  5. Đưa tất cả về lowercase
  6. Viết hoa chữ cái bắt đầu từ theo ý tưởng đếm từ phía trên
 
void Correct(char str[], int length)
{
    int first = 0, last = length - 1;
    // Xóa dấu trắng đầu chuỗi
    while (first < last && str[first] == ' ')
        first++;
    // Xóa dấu trắng cuối chuỗi
    while (last > first && str[last] == ' ')
        last--;
 
    // Viết hoa chữ cái đầu tiên
    if (str[first] >= 'a' && str[first] <= 'z')
        str[first] -= 32;
    for (int i = first + 1; i <= last; i++)
    {
        // Đưa hết về chữ thường
        if (str[i] >= 'A' && str[i] <= 'Z'){
            str[i] += 32;
        }
        if (i + 1 <= last)
        {
            // Bỏ dấu trắng thừa ở giữa
            if (str[i] == str[i + 1] && str[i] == ' ')
            {
                continue;
            }
            // Nếu là chữ cái đầu mỗi từ thì viết hoa
            if (str[i] == ' ' && str[i + 1] >= 'a' && str[i + 1] <= 'z')
            {
                str[i + 1] -= 32;
            }
        }
        printf("%c", str[i]);
    }
}

Lời giải chuẩn hóa chuỗi và đếm số từ trong C

#include 
#include 
 
int WordCount(char str[], int length)
{
    int word = (str[0] != ' ');
    for (int i = 0; i < length - 1; i++)
    {
        if (str[i] == ' ' && str[i + 1] != ' ')
        {
            word++;
        }
    }
    return word;
}
 
void Correct(char str[], int length)
{
    int first = 0, last = length - 1;
    // Xóa dấu trắng đầu chuỗi
    while (first < last && str[first] == ' ')
        first++;
    // Xóa dấu trắng cuối chuỗi
    while (last > first && str[last] == ' ')
        last--;
 
    // Viết hoa chữ cái đầu tiên
    if (str[first] >= 'a' && str[first] <= 'z')
        str[first] -= 32;
    for (int i = first + 1; i <= last; i++)
    {
        // Đưa hết về chữ thường
        if (str[i] >= 'A' && str[i] <= 'Z'){
            str[i] += 32;
        }
        if (i + 1 <= last)
        {
            // Bỏ dấu trắng thừa ở giữa
            if (str[i] == str[i + 1] && str[i] == ' ')
            {
                continue;
            }
            // Nếu là chữ cái đầu mỗi từ thì viết hoa
            if (str[i] == ' ' && str[i + 1] >= 'a' && str[i + 1] <= 'z')
            {
                str[i + 1] -= 32;
            }
        }
        printf("%c", str[i]);
    }
}
 
int main()
{
    char str[100];
    // Nhập chuỗi
    printf("\nNhap chuoi: ");
    fgets(str, sizeof str, stdin);
    // Do sử dụng fgets nên chuỗi của chúng ta sẽ đọc cả ký tự '\n'.
    // Xóa bỏ nó đi.
    int length = strlen(str) - 1; 
    str[length] = '\0';
    printf("So tu cua \"%s\" la %d", str, WordCount(str, length));
    printf("\nXau chuan hoa la: ");
    Correct(str, length);
}

Kết quả chạy thử :

 
PS G:\c_cources\day_61> g++ .\ChuanHoa.cpp -o .\ChuanHoa
PS G:\c_cources\day_61> .\ChuanHoa.exe
 
Nhap chuoi:    LAP    trINH    khong    KHO!
So tu cua "   LAP    trINH    khong    KHO!" la 4
Xau chuan hoa la: Lap trinh khong kho

Chuẩn Hóa String Trong C++