首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中将一行文本分隔成两个数组

在C中将一行文本分隔成两个数组
EN

Stack Overflow用户
提问于 2015-09-25 13:41:13
回答 2查看 80关注 0票数 1

我正在编写一个翻译程序,给出一个英文转换的文本文件。每一行文字看起来都像

你好,你好 再见;adiós

我想把这两个单词分成两个不同的字符数组。

char[]英语; char[]广度;

现在,我必须读取文件,并将每个单词存储在数组中。

代码语言:javascript
复制
 int currentChar;
 while( currentChar != EOF ) {

    fscanf(inFile, "%[^;]c, %c", eng, span);

    printf("%s", eng);
    currentChar = fgetc( inFile );


}`

当我打印出英语时,它会把两个单词都还给我,但是没有,所以输出看起来就像

海洛霍拉 德比亚迪奥斯

我是C的新手,所以任何一种技巧都会有帮助

EN

回答 2

Stack Overflow用户

发布于 2015-09-25 14:00:11

首先,您可以如下所示地修改fscanf行:

代码语言:javascript
复制
fscanf(inFile, "%[^;];%s", eng, span);

不过,您仍然需要考虑可能的缓冲区溢出或格式错误的输入行。

票数 3
EN

Stack Overflow用户

发布于 2015-09-25 14:11:05

我认为这就是您所要寻找的,并且至少会让您了解如何在您提供的输入格式的情况下使用fscanf格式字符串。您还需要添加逻辑以防止缓冲区溢出。

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void getTwoLanguages(FILE *inFile, char **language1, char **language2);

int main()
{
    char *en[1024], *sp[1024];
    int i;

    // Get the phrase pairs
    getTwoLanguages(stdin, en, sp);

    // Output
    for (i = 0; en[i] && sp[i]; i++)
        printf("%s <-> %s\n", en[i], sp[i]);

    // Cleanup
    for (i = 0; en[i]; i++)
        free(en[i]);
    for (i = 0; sp[i]; i++)
        free(sp[i]);

    return 0;
}

void getTwoLanguages(FILE *inFile, char **language1, char **language2)
{
    char working1[256], working2[256];
    while (!feof(inFile)
        && fscanf(inFile, "%[^;\n\r]%*[;\n\r]%[^;\n\r]%*[;\n\r]", working1, working2) == 2)
    {
        /* Save the token and NULL the next one to indicate EOL */
        *language1++ = strdup(working1);
        *language1 = NULL;
        *language2++ = strdup(working2);
        *language2 = NULL;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32783563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档