簡體   English   中英

使用strtok()比較兩個字符串

[英]Comparing two strings using strtok()

我需要比較兩個文本文件中的字符串。 當使用分離字符串strtok()對於文件),我有一個問題,同時指句子兩個文件,使用strtok()因為它們發生碰撞。

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

int main()
{
    FILE *fp,*fp1,*fp2;
    fp=fopen("inp1.txt","r");
    fp1=fopen("inp2t.txt","r");

    int f;
    char *a,*b,*chk;
    char buffer[500],buf[5000];

    while(fgets(buf,5000,fp1));
    {
        chk= (char *)strtok (buf," ");

        while(chk!=NULL)
        {
            rewind(fp);
            f=0;

            while(fgets(buffer,500,fp))
            {
                a= (char *) strtok(buffer,"\t");
                b= (char *) strtok(NULL,"\n");

                if(stricmp(a,chk)==0)
                {
                    printf("%s",b);
                    printf(" ");
                    f=1;
                }
            }

            if(f==0)
            {
                printf("%s",chk);
                printf(" ");
            }

            chk= (char *) strtok(NULL," ");                
        }
    }
    fclose(fp);
    fclose(fp1);

    getch();
    return 0;                    
}

如何修復此代碼,以便能夠從兩個輸入文件中提取令牌?

strtok()使用全局內部值,這將發生沖突。 使用strtok_s()可以防止這種情況,因為該函數采用了一個引用變量,該變量會將兩個實例分開。

strtok使用指向要解析的字符串的靜態指針,因此在任何給定時間只能激活該字符串一次。

我可能只會使用:

char buffera[5000];
char bufferb[5000];

fscanf(fp, "%4999s", buffera);
// ...
fscanf(fp, "%4999s", bufferb);

strtok具有記住最后位置的內部狀態。 strtok_r()是strtok()的可重入版本。 檢查平台上是否可用並使用它。

暫無
暫無

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

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