This entry is part 56 of 69 in the series Học C Không Khó
85/ 100
Để luyện tập kiến thức về chuỗi trong C, hôm nay Lập trình không khó sẽ cùng các bạn đi làm bài tập đảo ngược chuỗi nhập từ bàn phím trong ngôn ngữ C/C++. Chúng ta sẽ cùng nhau thực hiện đảo ngược chuỗi không sử dụng hàm và đảo ngược chuỗi sử dụng hàm có sẵn trong các thư viện của ngôn ngữ C/C++.
Input
Output
Chuoi sau khi dao nguoc la: hnirt pal coH |
- Đảo ngược chuỗi không dùng hàm có sẵn
- Đảo ngược chuỗi sử dụng hàm có sẵn
- Với ngôn ngữ lập trình C
- Với ngôn ngữ C++
Đảo ngược chuỗi không dùng hàm có sẵn
Nếu chưa biết cách nhập chuỗi các bạn có thể xem lại cách nhập chuỗi tại đây.
Đầu tiên các bạn phải đếm xem chuỗi có bao nhiêu kí tự. Với nhiệm vụ này thì mình sẽ viết riêng một hàm Length[]
trả về số lượng kí tự trong chuỗi. Lưu ý khi các bạn nhập chuỗi vào sử dụng hàm fgets[]
thì nó sẽ đọc cả kí tự '\n'
[hay kí tự enter] vào cuối chuỗi. Nhiệm vụ của các bạn là không đếm kí tự này.
Sau khi có được số lượng kí tự trong chuỗi, việc tiếp theo sẽ là đảo ngược chuỗi. Các bạn sẽ dùng một con trỏ kiểu char để lưu lại chuỗi đảo ngược.
Cuối cùng hàm DaoNguoc
sẽ trả về con trỏ mà chúng ta dùng để lưu kí tự.
Nếu bạn chỉ cần xuất ra thì có thể dùng 1 vòng for theo hướng ngược lại như hàm InDaoNguoc
.
Lời giải tham khảo:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include intLength[chars[]] { inti=0; while [s[i]!=NULL] ++i; returni-1; } char *DaoNguoc[charstr[]] { intlength=Length[str]; char*temp=new char[length+1]; for[inti=0;i=0;i--] { printf["%c",str[i]]; } } int main[] { chars[100]; printf["\nNhap chuoi: "]; fgets[s, 100,stdin];// nên dùng hàm fgets /*gets[s];*/ char*kq=DaoNguoc[s]; InDaoNguoc[s]; printf["\nChuoi sau khi dao nguoc la: %s",kq]; return0; } |
PS G:\c_cources\day_58> g++ .\Reverse.cpp -o .\Reverse PS G:\c_cources\day_58> .\Reverse.exe Nhap chuoi: Nguyen Van Hieu Chuoi sau khi dao nguoc la: ueiH naV neyugN Chuoi sau khi dao nguoc la: ueiH naV neyugN |
Đảo ngược chuỗi sử dụng hàm có sẵn
Với ngôn ngữ lập trình C
Ngôn ngữ C có thư viện string.h
, trong đó có hàm strrev[]
giúp chúng ta có thể đảo ngược chuỗi một cách đơn giản:
#include #include intmain[] { charname[30]="Nguyen Van Hieu"; printf["Truoc khi dao nguoc : %s\n",name]; printf["Sau khi dao nguoc : %s",strrev[name]]; return0; } |
Kết quả:
PS G:\c_cources\day_57> g++ .\StringFuntion.cpp -o .\StringFuntion PS G:\c_cources\day_57> .\StringFuntion.exe Truoc khi dao nguoc : Nguyen Van Hieu Sau khi dao nguoc : ueiH naV neyugN |
Với ngôn ngữ C++
Với việc sử dụng thư viện string thì bạn không cần phải đếm số lượng kí tự nữa rồi! Rất tiện lợi phải không.
Đầu tiên thì bạn khởi tạo một temp[kiểu string] trống, sau đó ta lần lượt thêm từng kí tự vào cuối temp. Ta sẽ sử dụng hàm pusk_back để thêm kí tự vào cuối temp. Bây giờ nhiệm vụ của chúng ta là lấy từng kí tự của s theo chiều từ sau tới và thêm vào temp.
Cuối cùng hàm
DaoNguoc
sẽ trả về temp, chính là chuỗi đã đảo ngược.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include #include using namespacestd; stringDaoNguoc[strings]{ intlength= s.length[]; stringtemp; for[inti=length-1;i>=0; i--]{ temp.push_back[s[i]]; } returntemp; } int main[] { strings; cin.clear[]; getline[std::cin, s]; cout Chủ Đề |