gpt4 book ai didi

c - 如何在c中按字符位置拆分字符串

转载 作者:太空狗 更新时间:2023-10-29 16:11:50 25 4
gpt4 key购买 nike

我正在使用 C 来读取外部文本文件。输入不是很好,看起来像;

0PAUL               22   ACACIA AVENUE                           02/07/1986RN666

如您所见,我没有明显的分隔符,有时值之间没有空格。但是我确实知道拆分时每个值的字符长度应该有多长。具体如下,

id = 1
name = 20
house number = 5
street name = 40
date of birth = 10
reference = 5

我已经建立了一个我想保存这些信息的结构,并尝试使用 fscanf 读入文件。然而,我发现一些事情只是没有做我需要的,

fscanf(file_in, "%1d, %20s", person.id[i], person.name[i]);

(我使用的实际线路试图获取所有输入,但你应该看到我要去哪里......)

长期的目的是将输入文件重新格式化为另一个输出文件,这样看起来会更容易一些。

我很感激我可能以错误的方式处理这件事,但如果有人能让我走上正确的道路,我将不胜感激。如果您能对我明显缺乏理解的问题宽容一些,我也将不胜感激。

感谢阅读

最佳答案

使用 fgets 一次读取每一行,然后从输入行中提取每个字段。警告:不会对缓冲区执行范围检查,因此必须注意适时调整缓冲区大小。

例如像这样的东西(我没有编译它,所以可能存在一些错误):

    void copy_substr(const char * pBuffer, int content_size, int start_idx, int end_idx, char * pOutBuffer)
{
end_idx = end_idx > content_size ? content_size : end_idx;
int j = 0;
for (int i = start_idx; i < end_idx; i++)
pOutBuffer[j++] = pBuffer[i];
pOutBuffer[j] = 0;
return;
}

void test_solution()
{
char buffer_char[200];
fgets(buffer_char,sizeof(buffer_char),stdin); // use your own FILE handle instead of stdin
int len = strlen(buffer_char);
char temp_buffer[100];
// Reading first field: str[0..1), so only the char 0 (len=1)
int field_size = 1;
int filed_start_ofs = 0;
copy_substr(buffer_char, len, filed_start_ofs, filed_start_ofs + field_size, temp_buffer);

}

关于c - 如何在c中按字符位置拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29875705/

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