30/09/2018, 17:40

Bị lỗi xuống dòng khi xuất xâu theo cấu trúc tên…họ…đệm

Code của e xuất ra bị lỗi xuống dòng. Ai chỉ giúp e lỗi sai vs ạ. E cám ơn nhiều.
Viết chương trình thực hiện nhập một xâu họ tên theo cấu trúc: họ…đệm…tên; chuyển xâu đó sang biểu diễn theo cấu trúc tên…họ…đệm.
VÍ dụ:
INPUT:

3
tran thuy linh
nguyen mai anh
le thi thao my

OUTPUT:

linh tran thuy 
anh nguyen mai 
my le thi thao 

CODE:

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

FILE *f1 = fopen("m.inp","r");
FILE *f2 = fopen("m.out","w");

void tenhodem(char s[]) {
    int n=0;
    char ds[20][30];
    char *p;
    p = strtok(s," ");
    while (p!= NULL) {
        strcpy(ds[n],p);
        n++;
        p=strtok(NULL," ");
    }

    fprintf(f2,"%s ",ds[n-1]);
    for (int i=0; i<n-1; i++)
        fprintf(f2,"%s ",ds[i]);
}

main() {
    char s[100];
    int t;
    fscanf(f1,"%d
",&t);
    while (t--) {
        fgets(s,100,f1);
        tenhodem(s);
        fprintf(f2,"
");
    }
}
Mai Anh Dũng viết 19:55 ngày 30/09/2018

Hiện giờ nhập vào rồi xuất ra nó bị lỗi như thế nào nhỉ @Linh_Tran1408?

Gió viết 19:46 ngày 30/09/2018

Do hàm gets đọc kí tự '\n' nên bạn phải check xem tên có '\n' ở cuối hay không.

    int len=strlen(ds[n-1]);
    if(ds[n-1][len-1]=='\n'){
        ds[n-1][len-1]='\0';
    }
    fprintf(f2,"%s ",ds[n-1]);    
Linh Trần viết 19:43 ngày 30/09/2018

File OUTPUT theo code của e hiện như này ạ:

linh
 tran thuy 
anh
 nguyen mai 
my le thi thao 
Linh Trần viết 19:50 ngày 30/09/2018

Cám ơn b nhé. Còn bài lần trc b xem nốt hộ m vs. Vẫn là lỗi xuống dòng.
Nhập 3 xâu ký tự ký tự s, s1, s2. Tìm tất cả những lần xuất hiện của s1 trong s và thay thế bằng s2. Xuất s ra màn hình.

INPUT

2
kldsv vksdvmdslvdsl vdsl svf
sv
12
jncsdk vsfgf vsd vzs
vs
123 56

OUTPUT

kld12 vksdvmdslvdsl vdsl 12f
jncsdk 123 56fgf 123 56d vzs

CODE:

#include<stdio.h>
#include<conio.h>
#include<string.h>
FILE *f1 = fopen("thay.inp","r");
FILE *f2 = fopen("thay.out","w");
 
void thay(char s[],char s1[],char s2[])
{
        int i=0,j,k,t=0,m,n=strlen(s),n1=strlen(s1),n2=strlen(s2);
        char p[1000];
        while(s[i]!=NULL)
        {
                k=i;j=0;
                while(s[k]==s1[j])
                {
                        k++;j++;
                }
               
                if(j==n1)
                {
                        for(m=0;m<n2;m++)
                        {
                                p[t]=s2[m];
                                t++;
                        }
                        i=i+n1;
                }
               
                else
                {
                        p[t]=s[i];
                        t++;i++;
                }
        }
        p[t]='\0';
        fprintf(f2,"%s",p);
}
 
main()
{
        char s[100],s1[100],s2[100];
        int t;
        fscanf(f1,"%d\n",&t);
        while(t--)
        {
                fgets(s,1000000,f1);
                fgets(s1,1000000,f1);
                s1[strlen(s1)-1]='\0';
                fgets(s2,1000000,f1);
               
                thay(s,s1,s2);
        }
}
Linh Trần viết 19:49 ngày 30/09/2018

M sửa lại đc r, cx tương tự như bài trên . Cám ơn b nhiều lắm.

Bài liên quan
0