Xóa khoảng trắng trong chuỗi C++ | Laptrinhcanban.com

Xóa khoảng trắng trong chuỗi C++

Hướng dẫn cách xóa khoảng trắng trong chuỗi C++. Bạn sẽ học được cách xóa khoảng trắng đầu và cuối chuỗi cũng như cách xóa toàn bộ ký tự trắng trắng trong chuỗi C++ sau bài học này.

Xóa toàn bộ ký tự trắng trong chuỗi C++

Trong C++ thì các ký tự trắng được tạo ra bởi dấu cách , tab hoặc là ký tự xuống dòng. Nếu bạn muốn loại bỏ toàn bộ các ký tự trắng này khỏi một chuỗi, thì cách làm dưới đây có lẽ là nhanh và đơn giản nhất.

Ý tưởng ở đây là chúng ta tạo ra một vòng lặp, sau đó kiểm tra từng ký tự trong chuỗi ban đầu và so sánh nó với ký tự trắng. Nếu ký tự đó không phải là khoảng trắng thì chúng ta sẽ lấy nó ra và lưu vào kết quả.

Chúng ta viết hàm xóa khoảng trắng trong chuỗi C++ như sau:

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

char* delete_space(char *str,char *result) {
int pos = 0;

const int len = strlen(str); /*Tìm độ dài chuỗi ban đầu*/
for(int i = 0; i < len; i++) {
char chr = str[i];

/*Nếu ký tự lấy ra là ký tự trắng thì bỏ qua*/
if (chr == '\r' || chr == '\n' || chr == ' ') {
continue;
}

/*Thêm ký tự lấy ra vào kết quả*/
result[pos++] = chr;
}
return result;
}

int main() {
char str[] = " Hello World ";
cout << "before: ["<< str<<"]\n";
char result[100];
cout << "after : ["<< delete_space(str,result)<<"]\n";
}

Kết quả:

before: [   Hello World     ]
after : [HelloWorld]

Trên đây chúng ta đã sử dụng vòng lặp for để lấy từng ký tự, hàm strlen() để lấy độ dài chuỗi ban đầu, và lệnh if với toán tử logic để kiểm tra ký tự. Chi tiết về các kiến thức này hãy tham khảo dưới đây:

Xóa khoảng trắng đầu và cuối chuỗi C++

Nếu bạn không muốn xóa toàn bộ khoảng trắng, mà chỉ muốn xóa khoảng trắng thừa trong chuỗi C++ ở vị trí đầu và cuối chuỗi ban đầu, hãy tham khảo cách mà Kiyoshi trình bày dưới đây.

Trong ngôn ngữ C++ không tồn tại hàm có sẵn nào trong thư viện chuẩn giúp chúng ta xóa ký tự trắng trong chuỗi C++ cả. Do đó chúng ta sẽ phải tự tạo hàm để giải quyết vấn đề này.

Ý tưởng ở đây là chúng ta sử dụng hàm isspace() trong vòng lặp để kiểm tra lần lượt các ký tự trong chuỗi ban đầu có phải là ký tự trắng hay không. Nếu là ký tự trắng thì sẽ tiến hành xóa nó.

Chúng ta viết hàm xóa khoảng trắng trong chuỗi C++ như dưới đây. Lưu ý trong hàm chúng ta thực hiện 2 lần vòng lặp, một là để xóa ký tự trắng từ đầu chuỗi, và một là để xóa ký tự trắng từ cuối chuỗi.

#include <iostream>
#include <cstdlib>
#include <cctype>
#include <cstring>
using namespace std;


char *trimString(char *str){
char *end; /*Khai con trỏ của ký tự cuối cùng*/

/*Vòng lặp đầu tiên để xóa khoảng trắng từ đầu chuỗi*/
while(isspace((unsigned char)*str)) str++;

/*Nếu vòng lặp thực hiện hết cả chuỗi thì trả về chuỗi str*/
if(*str == 0) return str;


/*end là vị trí cuối chuỗi, cũng là vị trí bắt đầu vòng lặp thứ 2*/
end = str + strlen(str) - 1;
/*Vòng lặp thứ hai để xóa khoảng trắng từ cuối chuỗi*/
while(end > str && isspace((unsigned char)*end)) end--;

end[1] = '\0';

return str;
}

int main() {
const char *str1 = " Hello World ";
cout <<"Before:["<< str1 <<"]\n";


/*Dùng hàm strdup để copy chuỗi ban đầu và trả về con trỏ của chuỗi đó*/
/*Gán con trỏ ở tạo bởi strdup vào con trỏ tmp*/
char *tmp = strdup(str1);
cout <<"After :[" <<trimString(tmp) <<"]";

/*Trách nhiệm giải phóng bộ nhớ thuộc về bên gọi*/
free(tmp);
exit(EXIT_SUCCESS);
}

Kết quả:

Before:[   Hello World     ]
After :[Hello World]

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách xóa khoảng trắng trong chuỗi C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.