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;
}
Khoa NTA viết 02:32 ngày 01/10/2018

Hàm cần sửa là Khoang_Trang_Moi_Tu():

void Khoang_Trang_Moi_Tu(char s[])
{
    int is_executed = 0;
    do {
        is_executed = 0;
        for (int i = 0; i < strlen(s); i++)
        {
            if (s[i] == ' ' && s[i + 1] == ' ')
            {
                Xoa(s, i);
                is_executed = 1;
            }
        }
    } while (is_executed);
}

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àm Xoa có thực thi lần nào hay không :3

Output:

Nhap chuoi:hello adsflka    aksdjfkl     aidjf a 
Chuoi sau khi xoa:hello adsflka aksdjfkl aidjf a
Tiến Ability Ete viết 02:31 ngày 01/10/2018

Cảm ơn ạn nhé

Mai Anh Dũng viết 02:26 ngày 01/10/2018

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é

Bài liên quan
0