Bài tập mảng kí tự : chèn , đảo ngược và đếm?

-Mình học tới phần mảng kí tự C trong c++ rồi và mình tự ra một bài tập có nội dung bên dưới và không giải quyết được bài tập đó :confused: đề bài của mình như sau :

Tạo một mảng kí tự a sau đó nhập vào chuỗi b , nếu chuỗi b xuất hiện trong chuỗi a thì chèn chuỗi b bằng chuỗi c có thể có độ dài > hơn chuỗi b

-Mình đã tìm được chuỗi b : con_tro_char = strstr(a,b);
nhưng làm sao chèn [thay b = c] thì mình lại không giải quyết đc
Y tưởng của mình : cắt mảng b từ vi trí 0 > vi trí kí tự đằng sau chuỗi b
VD :“hoc” trong “lam gi phai hoc , hahaha”
lam gi phai hoc, hahaha -> lam gi phai iloveyousomuch, hahaha
thì mình sẽ cắt "lam gi phai "+“chèn c”+"chèn phần còn lại đằng sau chữ học
-hàm strcpy có cho phép mình cắt mảng kí tự b từ vi trí x > vi trí strlen(b) có được khang?
-hàm strcat có cho phép mình chèn vị trí đầu hay vi trí n ko?
-Các bạn nếu có thuật toàn nào hay giải đc bài này thì share cho m` nha :smile:
-Giai xong bài này mình sẽ làm phần đảo ngược chuỗi + đảo ngược từ trong chuỗiđếm số lần ký tự xuất hiện trong chuỗi . Các bạn có thể gợi ý cho mình cách giải đc không vì hiện tại mình chưa nghĩ ra được giải pháp nào để giải bài tập này :sunny:

Cảm ơn các bạn đã dành thời gian để xem qua bài viết của mình

#include<iostream>
#include<string.h>
#define MAX 100
using namespace std;
void replace(char*, char*, char*);

int main()
{
	char a[MAX], b[MAX], c[MAX];
	cout << "Nhap vao chuoi a" << endl;
	gets_s(a);
	cout << "Nhap vao chuoi b" << endl;
	gets_s(b);
	cout << "Nhap vao chuoi c" << endl;
	gets_s(c);
	replace(a, b, c);
	cout << a << endl;
	return 0;
}

void replace(char*a, char*b, char*c)
{
	char temp[MAX];
	char *ptr = strstr(a, b);
	strcpy(temp, ptr + strlen(b));

	int i;
	for (i = 0; i < strlen(c); i++)
	{
		ptr[i] = c[i];
	}

	for (int j = 0; j <= strlen(temp); j++) //Dau = de gan ca ky tu \0 vao cuoi chuoi.
	{
		ptr[i] = temp[j];
		i++;
	}
}

Mình làm như thế này, không biết có cách nào nhanh hơn không nữa, đợi mấy anh vào hướng dẫn thêm vậy :smiley:

^
Ptr = strstr(a,b) = hoc buoi dau tien
temp = ptr + chiều dài b // strcpy cộng được @@
temp = hoc buoi dau tien + 3 là sao :frowning:
vòng lập i sẽ gán chuỗi c = i
giả sử : c = sao thì ptr = sao buoi dau tien
nếu c = iloveyou thì ptr = iloveyou dau tien :expressionless:

Ai giải thích giúp tui phép tính cộng trừ trong mấy hàm của xâu kí tự xem @@
strcpy(X,B+1 số)
strcat(X,B+1 số)
có strstr(X,B+1 số ) không ta @@ ?
còn 1 đống hàm xài phép + , - khi nào

strcpy,strncpy,strcat,strncat,strlwr,strupr,strcmp,strchr,strrchr
strstr,strlen

Bạn debug đi rồi sẽ hiểu cách nó hoạt động.

woa hiểu rồi
còn cách nào nữa ko @@!

a = tôi đi học ngoại ngữ
b = học
c = làm việc có liên quan
KQ : tôi đi làm việc có liên quan ngoại ngữ

Mình thấy trong code của bạn có sử dụng con trỏ. Đến bh mình vẫn k hiểu cách hoạt động của nó ra sao mà tại sao phải dùng nó :pensive:. Bạn có thể nói cho mình đc k

Bạn cũng UIT mà đúng không? Tuần này đang bật ôn thi mode nên lười gõ quá, đợi thi xong rồi mình trình bày kĩ luôn. :smiley:
Hoặc @Nghia_Pham hiểu rồi thì giải thích lại giúp mình với. :smiley:

Ủa bạn k10 luôn hả. Ôn xong hết chưa :))

Chắc đủ qua môn thôi bạn :smile:

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