01/10/2018, 00:22
Hỏi về xóa chuỗi
Mọi người ơi ai giúp mình cái đoạn code này với. Minh xóa được các khoảng trắng thừa ở đầu và cuối chuỗi rồi nhưng đến đoạn khoảng trắng liên tiếp ở các từ thì nó không xóa mọi người chỉ mình cách sửa với.
#include<iostream>
#include<string.h>
using namespace std;
//Ham Xoa
void Xoa(char s[], int vitrixoa)
{
int n =strlen(s) ;
for (int i = vitrixoa; i < n; i++)
{
s[i] = s[i+1];
}
n--;
}
//Xoa ky tu khoang trang o dau.
void Xoa_ki_tu_dau(char s[])
{
while (true)
{
if (s[0] == ' ' )
{
Xoa(s, 0);
}
else
{
break;
}
}
}
//Xoa ki tu khoang trang o cuoi.
void Xoa_ki_tu_cuoi(char s[])
{
while (true)
{
if (s[strlen(s)-1] == ' ')
{
Xoa(s,strlen(s) - 1);
}
else
{
break;
}
}
}
//Ham Xoa khoang trang lien tiep moi tu
void Khoang_Trang_Moi_Tu(char s[])
{
for (int i = 0; i < strlen(s); i++)
{
if (s[i] == ' ' && s[i + 1] == ' ')
{
Xoa(s, i);
}
else
{
break;
}
}
}
int main()
{
char s[100];
cout << "Nhap chuoi:";
gets_s(s);
Xoa_ki_tu_dau(s);
Xoa_ki_tu_cuoi(s);
Khoang_Trang_Moi_Tu(s);
cout << "Chuoi sau khi xoa:" << s <<endl;
system("pause");
return 0;
}
Bài liên quan
Hàm cần sửa là
Khoang_Trang_Moi_Tu()
:Lỗi do nếu ký tự tiếp theo không phù hợp điều kiện thì vòng lặp sẽ break và ngưng thực thi. Do mỗi lần xóa,
strlen(s)
sẽ thay đổi (dĩ nhiên là các vị trí với i sẽ không còn chính xác nữa) nên cần phải quất nó vào 1 vòng lặp có 1 biến check xem trong lần lặp đó thì hàmXoa
có thực thi lần nào hay không :3Output:
Cảm ơn ạn nhé
Nếu bạn đã sửa được lỗi rồi thì chọn câu trả lời của Khoa làm câu trả lời đúng đi nhé