Duyệt chuỗi, tìm ra vị trí của khoảng trắng đầu tiên và cuối cùng. Chuỗi con từ khoảng trắng đầu tiên đến khoảng trắng cuối cùng là họ lót. Từ khoảng trắng cuối cùng đến hết chuỗi là phần tên.
Viết hàm tách tên và họ lót từ một chuỗi cho trước
các anh ơi giúp em giải bài toán trên nhé ^^ thankss all bro
Duyệt chuỗi, tìm ra vị trí của khoảng trắng đầu tiên và cuối cùng. Chuỗi con từ khoảng trắng đầu tiên đến khoảng trắng cuối cùng là họ lót. Từ khoảng trắng cuối cùng đến hết chuỗi là phần tên.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
anh viết code dùm em luôn đi ameo.
Mình gợi ý bạn thế này :
C Code:
void Tach(const char *chuoi, char *holot, char *ten) { int i = 0; int vitridau = -1, vitricuoi; while (chuoi[i] != 0) { if (chuoi[i] == ' ') { if (vitridau < 0) vitridau = i; else vitricuoi = i; } i++; } int j = 0; for (i=vitridau+1;i<vitricuoi;i++) holot[j++] = chuoi[i]; holot[j] = 0; i = vitricuoi + 1; j = 0; while (chuoi[i] != 0) { ten[j++] = chuoi[i]; i++; } ten[j] = 0; }
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
Mình viết 1 hàm tách tên như này ? Bạn giúp mình xemnos sai ở đâu với ? Chỉ rõ dùm mình với nha! Mình muốn viết giống hàm copy trong pascalCode:char* copi(char *s,int vt,int sl) { char *st; for(int i=vt;i<=vt+sl;i++) { st=st+s[i]; } st[sl+1]='\0'; return st; }
Trong C bạn khổng thể cộng trực tiếp 2 mảng char, cụ thể là không thể st=st+s[i];
C Code:
char* copi(char *s,int vt,int sl) { char *st; int j=0; for(int i=vt+1;i<vt+sl;i++) //thường là vt thực +1 vì chuỗi bắt đầu từ 0 { st[j]=s[i]; j++; } st[sl+vt]='\0'; return st; }
Code:char* copy(char *s,int vt,int sl) { char *st; int j=0; int i=vt; st=(char*)malloc(sizeof(char)); if(sl>0) { while(j<=sl) { st[j++]=s[i++]; } st[sl]='\0'; return st; } else return " "; }Code:char* tachten(char *s) { char *st; int vt,sl; int i,n; n=strlen(s); for(i=n;i>=0;i--) { if(s[i]==' ') { vt=i+1; break; } } sl=n-(vt); st=copy(s,vt,sl); return st; }Code:char* tachdem(char *s) { char*st; int x,y,n; x=strlen(tachho(s)); y=strlen(tachten(s)); n=strlen(s); st=copy(s,x+1,n-(x+y+2)); return st; }Mình đã viết được rồi. Mình đã thử và thấy đúng.Bạn nào có cách nào hay hơn ko?Code:char* tachho(char *s) { char *st; int vt,sl; int i,n; n=strlen(s); for(i=0;i<=n;i++) { if(s[i]==' ') { sl=i; break; } } st=copy(s,0,sl); return st; }
e có 1 code ko dùng con trỏ (vì e chưa học con trỏ) nhung hơi dài:
các a cho e xin ý kiến ạ:
#include <stdio.h>
#include"conio.h"
int main(void)
{ int m,n;
char a[100];;
printf("nhap chuoi: ");
gets(a);
printf("ho: ");
for( int i=0;;i++)
{ m=i+1;
if(a[i]==' ') break;
printf("%c",a[i]);
}
printf("\nten dem: ");
for(;;m++)
{ n=m+1;
if(a[m]==' ') break;
printf("%c",a[m]);
}
printf("\nten: ");
for(;;n++)
{
if(a[n]=='\0') break; printf("%c",a[n]);
}
getche();
return 0;
}