比较C 中的字符串



我想简化一个txt文档,然后尝试了此代码:

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    // 1. Step: Open files
    FILE *infile;
    FILE *outfile;
    char line[256];
    infile = fopen("vcard.txt", "r");
    outfile = fopen("records.txt", "w+");
    if(infile == NULL || outfile == NULL){
         cerr << "Unable to open files" << endl;
         exit(EXIT_FAILURE);
    }
    // 2.Step: Read from the infile and write to the outfile if the line is necessary
    /* Description:
    if the line is "BEGIN:VCARD" or "VERSION:2.1" or "END:VCARD" don't write it in the outfile
    */
    char word1[256] = "BEGIN:VCARD";
    char word2[256] = "VERSION:2.1";
    char word3[256] = "END:VCARD";
    while(!feof(infile)){
        fgets(line, 256, infile);
        if(strcmp(line,word1)!=0 && strcmp(line,word2)!=0 && strcmp(line,word3)!=0){ // If the line is not equal to these three words
          fprintf(outfile, "%s", line); // write that line to the file
        }
    }
    // 3.Step: Close Files
    fclose(infile);
    fclose(outfile);
    getch();
    return 0;
}

不幸的是,尽管有ifile包含Word1,Word2和Word3百倍,但我仍然获得1或-1,作为Strcmp的返回值。

我应该尝试什么?

fgets作为字符串的一部分返回newline字符。由于您要比较的字符串不包含newline,因此它们会被比较为不同。

由于您在C 中写作,因此您可能需要使用std::ifstreamstd::getline读取文件。getline返回的字符串将没有新线,作为额外的奖励,您无需指定限制行大小。

另一个(无关的)问题:使用while (!foef(file))是错误的,并且可能导致最后一行被读取两次。相反,您应该循环直到fgets返回零指针。

相关内容

  • 没有找到相关文章

最新更新