簡體   English   中英

在C中將一行文本分成兩個數組

[英]Separating a line of text into two arrays in C

我正在編寫一個翻譯程序,給出了英語轉換的文本文件。 每行文字看起來像

你好

再見;阿迪奧斯

我想將兩個單詞分成兩個不同的char數組

char [] eng;

char [] span;

現在我必須讀入文件並將每個單詞存儲在數組中

 int currentChar;
 while( currentChar != EOF ) {

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

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


}`

當我打印出eng時,它給我兩個單詞,但沒有; 所以輸出看起來像

你好

再見

我是C的新手,所以任何技巧都可以幫助您

對於初學者,您可以像下面這樣修改fscanf行:

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

但是,您仍然必須考慮可能的緩沖區溢出或輸入行格式錯誤。

我認為這就是您要尋找的東西,至少會給您一個關於在給定輸入格式的情況下如何使用fscanf格式字符串的想法。 您還需要添加邏輯以防止緩沖區溢出。

#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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM