Phương thức tìm kiếm find trong C++?

Cho 1 chuỗi: Hom nay troi kha dep
Sử dụng phương thức find tìm kiếm chữ H và h và thay nó thành kí tự ‘k’
chuỗi kết quả là: Kom nay troi kka dep

code của em

void ThayDoi(string &s)
{
	int vitri = s.find('H');

	while(vitri != -1)
	{
		s.replace(s.begin() + vitri ,s.begin() + vitri + 1, "k");
		vitri = s.find('H', vitri + 1);
	}
}

Em muốn hỏi là tìm cả chữ h thì cách ngắn gọn nhất là gì?
Em xin chân thành cảm ơn!
Chúc mọi người một ngày làm việc vui vẻ ạ!

Có hàm std::replace_if trong algorithm có thể giúp

bool isH(char c) {
	return c=='h' || c=='H';
}

int main(void) {
	string abc = "hhhhahsdfhasdf h asdf lkhasdf ASf h HHHH";
	replace_if(abc.begin(), abc.end(), isH, 'k');
	cout << abc;
	return 0;
}
1 Like

điều kiện bắt dùng find bác ạ :’(

à em cảm ơn bác nhé ^^ thông não quá ^^

Nếu bắt buộc dùng hàm find thì với mình thì mình thấy cách trên tốt nhất r
Hóng cách giải tốt hơn :smile:

1 Like

Vâng. em tìm hiểu hoài hàm find mà không đi tìm hiểu hàm thay thế :wink:

Sư huynh cho em hỏi là tham số truyền vào hàm replace_if(…, isH,…); chỗ isH tại sao isH lại không truyền vào tham số là 1 ký tự char??? em vẫn chưa hiểu lắm phần isH được truyền vào hàm replace_if.
Mong sư huynh giải đáp.
Em xin cảm ơn ạ

À tham số thứ 3 của replace_if yêu cầu truyền vào là một hàm kt xem giá trị đó có cần phải thay với tham số thứ 4 hay không.
Vì bạn cần là muốn thay ‘h’ hoặc ‘H’ nên mình viết vậy để đỡ gọi 2 hàm.

Tuy nhiên dùng 2 hàm std::replace thì cũng đc.
Thì khi đó tham số thứ 3 = giá trị muốn được replace.
http://www.cplusplus.com/reference/algorithm/replace/

2 Likes

Dạ em hiểu rồi ạ :smiley: cảm ơn sư huynh nhiều ạ :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?