01/10/2018, 09:49
Thắc mắc về chương trình tách tên và họ lót trong C
Xin chào m.n, Như tiêu đề, em thắc mắc về chương trình tách tên và họ lót trong C , không biết chương trình họat động như thế nào ?
đây là code mẫu em kiếm trên google
#include < stdio.h >
#include < conio.h >
#include < string.h >
void tachten(char s[], char ten[], char lot[]) {
int i, j, n;
n = strlen(s);
for (i = n - 1; i > 0; i--)
if (s[i] == ' ')
break;
for (j = 0; j < i; j++)
lot[j] = s[j];
lot[i] = ' ';
for (j = i + 1; j < n; j++)
ten[j - i - 1] = s[j];
ten[n - i - 1] = ' ';
}
void main(void) {
char s[30], ten[20], lot[20];
printf(" nhap ho va ten
");
gets(s);
tachten(s, ten, lot);
printf("
ho va chu lot:
");
puts(lot);
printf(" ten:
");
puts(ten);
getch();
}
Kết quả in ra thì đúng,nhưng em không hiểu ở function tachten[] nó họat động như thế nào, em ngồi suy mãi mà không ra mong anh chị giải đáp thắc mắc giúp em, em xin cảm ơn
Bài liên quan
cảm ơn anh, Nghe anh giải thích thì em cũng hiểu được một phần rồi
nhưng còn ở đoạn code này nó hoạt động như thế nào ạ
lên google gõ học
học debug
, chứ ko có code sẵn mà còn ko hiểu thì chết đấyVí dụ:
i là vị trí của dấu cách đầu tiên kể từ bên phải (được xác định qua vòng for i ngược ở trên), vậy thì từ vị trí 0 (đầu tiên) đến vị trí i-1 là họ+đệm (vòng
for(j=0; j<i; j++)
thể hiện điều đó), vị trí lot[i] là vị trí kết thúc xâu char[] (theo lí thuyết về xâu) nên ta gán\0
(kí tự null)); vị trí i+1 đến cuối là tên (vòngfor(j=i+1; j<n; j++)
thể hiện điều đó), vị trí ten[n-i-1] cũng gán là null vì nó là vị trí kết thúc xâu.Về kí tự null ở cuối xâu được thể hiện qua mảng char, bạn đọc lại lí thuyết (mình cũng không biết phải gọi nó là gì cho chính xác, tóm lại là ở cuối xâu có 1 kí tự null)
cảm ơn anh, em đã hiểu rồi
@Hoai_Nam_Truong: //tag để bạn nhớ đọc: