Thắc mắc về đoạn code tìm kiếm và thay thế chuỗi (khác nhau i++ và ++i) trong lập trình C
#include <stdio.h>
#include <string.h>
#include <conio.h>
char *str_str (char *s, char *s1, char *s2)
{
int len = strlen (s);
int len1 = strlen (s1);
int len2 = strlen (s2);
int i = 0, j, luu;
if (len1 != 0)
while (i < len)
{
if (s[i] == s1[0])
{
j = 0;
luu = i;
while (s1[++j] == s[++luu] && j < len1);
if (j == len1)
{
memmove (&s[i + len2], &s[i + len1], len - i - len1 + 1);
memcpy (&s[i], s2, strlen(s2));
len = len - len1 + len2;
i += len2;
}
else i++;
} else i++;
}
return s;
}
void main()
{
char s[255], s1[50], s2[50];
printf ("
Nhap chuoi cha: ");
gets (s);
printf ("
Nhap chuoi can tim: ");
gets (s1);
printf ("
Nhap chuoi thay the: ");
gets (s2);
str_str (s,s1,s2);
printf ("
chuoi sau khi thay the la: %s", s);
getch();
}
đề bài tìm và thay thế chuỗi s1 trong chuỗi s bằng chuỗi s2
có 2 trường hợp:
+1 là while ((s[luu++] == s1[j++]) && (j < len1)) ;
In ket quả
Nhap chuoi cha: maikhongra
Nhap chuoi can tim: khi
Nhap chuoi thay the: 1234
chuoi sau khi thay the la: mai1234ngra (sai)
+2 là while ((s[++luu] == s1[++j]) && (j < len1)) ;
In ket quả
Nhap chuoi cha: maikhongra
Nhap chuoi can tim: khi
Nhap chuoi thay the: 1234
chuoi sau khi thay the la: maikhongra (oke kết quả đúng vs điều kiện)
Bạn nào có thể chỉ cho mình các bước của j++ với ++j vì sao có sự khác nhau này không? help help…
Hi Tỉnh Vũ Văn.
Một cái cộng trước một cái cộng sau.
Bạn ơi mình thấy 1 trường hợp khi kết thúc hàm while thì không xét tới ky tự cuói cùng, 1 cái thì có, nhưng mình vẫn không thực sự hiểu thứ tự tăng j trong vòng while lắm bạn có thể nói rõ hơn giùm mình dc ko
truy vấn s[j++] tương đương với truy vấn s[j] rồi j = j + 1
truy vấn s[++j] tương đương với j = j + 1 rồi truy vấn s[j]
Góp ý là bạn đặt tên tham số không biết đường nào mà gọi hàm
bạn ơi mình chỉ cho mình xem các bước vòng while thực hiện như vậy có đúng không:
Trường Hợp while( s[luu++] == si [j++] && (j < len1));
Nhap chuoi cha: maikhongra
Nhap chuoi can tim: mao (không xét chữ cuối)
Nhap chuoi thay the: 1234
chuoi sau khi thay the la: 1234khongra (kết quả là sai)
ta có : len1 = 3
j = 0, luu = 0 && 0 < 3 (đúng tiếp tục while so sánh m)
j = 1, luu = 1 && 1 < 3 (đúng tiếp tục while so sánh a)
j = 2, luu = 2 && 2 < 3 (so sánh i vs o sai dừng vòng while nhưng do j++ nên j = 3 và j == len 1 nên cây lệnh thay thế vẫn thực hiện)
Mình vừa viết đến dòng j mới hiểu ra, “tưởng tượng kém quá”, cảm ơn mn nhiều cuối cùng ình cũng hiểu