gpt4 book ai didi

c - c 中的字符串分词器直到制表符和换行符

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:21 25 4
gpt4 key购买 nike

当我想标记下面的文本并将标记保存在结构中时,我遇到了一些问题。

Wojciech Szczęsny   POL     G   1.95    84  18-04-90    Warsaw  Legia Warszawa
Bacary Sagna FRA D 1.76 72 14-02-83 Sens Auxerre
Per Mertesacker GER D 1.98 90 29-09-84 Hannover Werder Bremen

单词之间是一个空格和一个制表符,我想给出以下内容:

t[1].nev = Wojciech Szczesny
t[1].orsz = POL
t[1].poz = G
t[1].mag = 1.95
t[1].suly = 84
t[1].datum = 18-04-90
t[1].varos = Warsaw
t[1].ecs = Legia Warszawa and etc.

我没有编辑 txt 文件,因为它包含超过 20,000 条数据。

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct{
char nev[50];
char orsz[3];
char poz[3];
float mag;
int suly;
char datum[10];
char varos[30];
char ecs[50];
}JATEKOS;

int main(){
FILE*f=fopen("Text.txt","rt");
int i;
JATEKOS*t;
t = (JATEKOS*)malloc(3*sizeof(JATEKOS));
for(i=1;i<=2;++i){
fscanf(f,"%[^\t]",t[i].nev);
fscanf(f,"%[^\t]",t[i].orsz);
fscanf(f,"%[^\n]",t[i].poz);
fscanf(f,"%[^\t]",&t[i].mag);
fscanf(f,"%[^\t]",&t[i].suly);
fscanf(f,"%[^\t]",t[i].datum);
fscanf(f,"%[^\t]",t[i].varos);
fscanf(f,"%[^\n]",t[i].ecs);
}
printf("\n\n");
for(int i=1;i<=2;++i){
//printf("%s %s %s %f %i %s %s %s",t[i].nev,t[i].orsz,t[i].poz,t[i].mag,t[i].suly,t[i].datum,t[i].varos,t[i].ecs);
printf("%s %s %s",t[i].nev,t[i].orsz,t[i].poz);
}

getch();
}

最佳答案

大多数情况下,C 程序员会保存很少的实用程序供将来使用 - 一个是使用 strtok 来处理字符串。试试这个,它更灵活:

typedef struct{
char nev[50];
char orsz[3];
char poz[3];
float mag;
int suly;
char datum[10];
char varos[30];
char ecs[50];
}JATEKOS;
#define MAX_SPLIT 24

char **split(char **result, char *working, const char *delim)
{
int i;
char *p=strtok(working, delim);
for(i=0; p!=NULL && i<MAX_SPLIT; p=strtok(NULL, delim), i++)
{
result[i]=p;
result[i+1]=NULL;
}
return result;
}


int main()
{
FILE*f=fopen("Text.txt","rt");
int i=0;
JATEKOS *t, *rec;
char tmp[128]={0x0};
char *r[MAX_SPLIT + 1]={NULL};

t = (JATEKOS*)malloc(3*sizeof(JATEKOS));
rec=t;
while(fgets(tmp, 128, f)!=NULL)
{
split(r, tmp, "\t \n");
sprintf(rec->nev, "%s %s", r[0], r[1]);
strcpy(rec->orsz, r[2]);
strcpy(rec->poz , r[3]);
rec->mag=atof( r[4]);
rec->suly=atoi( r[5]);
strcpy(rec->datum, r[6]);
strcpy(rec->varos, r[7]);
strcpy(rec->ecs , r[8]);
i++;
if(i==2) break;
rec++;
}
printf("\n\n");
for(i=1;i<=2;++i){
//printf("%s %s %s %f %i %s %s %s",t[i].nev,t[i].orsz,t[i].poz,t[i].mag,t[i].suly,t[i].datum,t[i].varos,t[i].ecs);
printf("%s %s %s",t[i].nev,t[i].orsz,t[i].poz);
}

getch();
return 0;
}

关于c - c 中的字符串分词器直到制表符和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20357630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com