Chèn xâu kí tự vào vị trí bất kì trong C

Nhập xâu kí tự W và xâu S, nhập số nguyên p và q. Hãy chèn xâu S vào xâu W ở vị trí p và q, sau đó in ra xâu kết quả. Nếu p hoặc q lớn hơn độ dài của W thì không thực hiện việc chèn và thoát luôn khỏi chương trình, không cần in gì thêm.

Đây là code của em ạ, mọi người giúp em với ạ

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
	char w[50],s[50];
	int i,p,q,d,j,k;
	printf("Nhap W = ");
	gets(w);
	printf("Nhap S = ");
	gets(s);
	printf("P = ");
	scanf("%d",&p);
	printf("Q = ");
	scanf("%d",&q);
	d=strlen(w);
	k=strlen(s);
	if(p<d && q<d)
	{
		for(i=0;i<d;i++)
	    {
		    if(p==i||q==i)
		    {
				d=d+k;
				for(j=0;j<k;j++)
			    {
			        strcat(&w[i],&s[j]);			   
			    }	
		    }
    	     }	
	}
	printf("Ket qua: %s",s);
	return 0;
}

Bạn đã đọc hỉêu đề và biết đề muốn bạn làm gì chưa, bạn có thắc mắc gì về đề bài không, cho ví dụ input thì bạn có biết output là gì không?
và bạn đang cần giúp gì?

5 Likes

Mình hiểu đề ạ.
VD: input là chuỗi w: abcdef
chuỗi s: +
p=1,q=3
output là a+bc+def
Mình cần giúp về thuật toán ạ.

1 Like

mình đang không biết “thuật toán” mà bạn nói là gì
mà nếu bạn chưa có “thuật toán” thì sao lại viết code được
thuật toán mà bạn nói là bài giải chăng?

3 Likes

mình cần gợi ý về bài này ạ, mình đang mắc ở đoạn từ vòng lặp for (j=0;j<k;j++) mình đang không biết xử lí chỗ này như nào ạ

1 Like

trước khi viết code, bạn cần phải biết bạn viết “code để làm gì, thực hiện công việc gì”
lập trình là giải quyết vấn đề, là mô tả những gì bạn cần/muốn làm để giải quyết vấn đề bằng ngôn ngữ lập trình, để máy tính có thể thực thi được công việc mà bạn muốn máy tính làm

khi bạn biết rõ, hiểu rõ vấn đề, bạn có thể mô tả những gì bạn cần làm bằng lời (hoặc bằng mã giả hay phương tiện nào đó)
và từ những công việc đó (phép cộng/trừ/nhân/chia/nhập/xuất/…) mới viết ra những dòng lệnh tương ứng

chứ không phải là đọc đề xong rồi bắt đầu viết code mà không biết mình cần viết cái gì
bạn cần phải nói rõ là bạn lặp để làm gì, bạn có thể nói ra ý muốn của bạn, lặp k lần, mỗi lần lặp bạn muốn làm gì không? bạn phải mô tả việc bạn muốn làm (nhưng chưa biết dùng lệnh gì) thì người ta sẽ gợi ý hàm/lệnh cho bạn
giống như bạn xin nhờ chỉ đường, nhưng bạn lại không biết mình muốn đi đâu

5 Likes

Đầu tiên, mình dùng vòng lặp for(i=0;i<d;i++) để duyệt từ đầu đến cuối xâu w. Nếu p hoặc q=i thì tăng độ dài của xâu w lên bằng đúng độ dài của xâu s. Sau đó chạy vòng lặp for(j=0;j<k;j++) để duyệt từ đầu tới cuối xâu s, dùng hàm strcat để gán từng kí tự của xâu s vào cuối xâu w. Ý mình là vậy nhưng không biết làm thế nào cho đúng.
Mình cảm ơn lời góp ý của bạn ạ!

1 Like

chỉ cần nhìn vào câu này thì đã thấy không giải quyết được vấn đề, đề kêu bạn chèn nguyên xâu s vào vị trí p và nguyên xâu s vào vị trí q

nhắc lại “lập trình là giải quyết vấn đề”
chỉ cần là giải quyết được vấn đề là được

với bài này, nhập xong xuất từng kí tự, với kí tự ở vị trí p và q thì xuất thêm xâu s nữa là được

// lặp n lần (với n là length của xâu s), tạm gọi biết lặp là i
    // nếu vị trí là p hoặc q thì xuất sâu s (không thì thôi)
    // xuất kí tự ở vị trí i

thử giải ví dụ này
với i = 0, xuất ra kí tự a -> màn hình hiện a
với i = 1, vì i = p xuất ra xấu s, sau đó vẫn xuất kí tự ở vị trí 1 là b, màn hình lúc này: a+b
với i = 2, … => a+bc

không cần cái gì gọi là chèn hay xử lý gì ở đây cả, nhưng vẫn giải quyết vấn đề

5 Likes

Em hiểu rồi ạ, em cứ làm nó phức tạp lên. Em cảm ơn anh nhiều nhé!

1 Like

Bạn ơi, bạn làm được bài này chưa. mình cũng bị vướng bài này.

Đọc các hết các bài của @kisuluoibieng chưa?

1 Like

rồi ạ nhưng mà vẫn chưa hiểu ạ

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