Code xác định vị trí của chuỗi con bị sai

Đề: Viết chương trình nhập vào 1 chuỗi nguồn, ví dụ “Nguyen Minh Long”, sau đó nhập vào 1 chuỗi con, ví dụ “Minh”, chương trình sẽ xác định vị trí bắt đầu của chuỗi con ở vị trí nào trong chuỗi nguồn. Kết quả in ra màn hình như sau:

  • Chuoi nguon la : Nguyen Minh Long
  • Chuoi con la : Minh
  • Vi tri bat dau cua chuoi con la : 8

Kết quả của mình:
Screenshot (219)
Không hiểu sao code mình chạy nhưng nó lại cứ bị kém 1 là sao vậy ae. Ae nhìn giúp mình bug chỗ nào với @@.

#include <stdio.h>
#include <string.h>
main ()
{
	
          char a [100], b [75], c [100]; 
	      /* Trong do: 
		     - a: Chuoi nguon; 
		     - b: Chuoi con;
		     - c: Chuoi phat sinh;*/ 
	      int start = 1, i, ss;
	      printf ("Nhap chuoi nguon: ");
	      gets (a);
	      printf ("Nhap chuoi con: ");
	      gets (b);
	      printf ("\n- Chuoi nguon la: %s\n", a);
	      printf ("- Chuoi con la: %s", b);
	      while (start <= strlen (a) - strlen (b) + 1)
	      {
		       for (i = 0; i < strlen (b); i ++)
		       {
			          c [i] = a [start + i];
		       }
		       c [i] = NULL;
		       ss = strcmp (c, b);
		       if (ss == 0)
			          printf ("\n- Vi tri bat dau cua chuoi con la: %d", start );
		       start ++;
	       }
}

Toán học bắt đầu bằng số 0 bạn à. Cái đó dân học lập trình phải biết ngay vào buổi đầu tiên. Mình không rõ trong C thế nào, nhưng các ngôn ngữ khác phần tử đầu tiên của mảng hoặc ký tự đầu tiên của chuỗi được đánh dấu bằng vị trí thứ… 0

Vậy thì rút ra điều gì? Nếu vị trí cho người đọc hiểu thay vì máy thì khi xuất ra bạn cộng thêm 1 nhé.

7 Likes

start = 1 tức là bỏ qua vị trí đầu tiên rồi.

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