C++ 比较C+中的字符串+;
我想简化一个txt文档,我尝试了以下代码:C++ 比较C+中的字符串+;,c++,arrays,char,compare,C++,Arrays,Char,Compare,我想简化一个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
#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;
}
#包括
#包括
使用名称空间std;
int main()
{
//1.步骤:打开文件
文件*填充;
文件*输出文件;
字符行[256];
infle=fopen(“vcard.txt”,“r”);
outfile=fopen(“records.txt”,“w+”);
if(infle==NULL | | outfile==NULL){
cerrfgets
将换行符作为字符串的一部分返回。由于要比较的字符串不包含换行符,因此会将它们作为不同的字符串进行比较
<> P>因为你在C++中编写,你可能想使用<代码>:STF:<流> />代码> STD::GETLION<代码>来读取文件。
另一个(无关)问题:使用while(!foef(文件))
错误,可能会导致最后一行被读取两次。相反,您应该循环,直到fgets
返回空指针。fgets
将换行符作为字符串的一部分返回。由于您要比较的字符串不包含换行符,因此会将它们作为不同的字符串进行比较
<> P>因为你在C++中编写,你可能想使用<代码>:STF:<流> />代码> STD::GETLION<代码>来读取文件。
另一个(无关)问题:使用while(!foef(文件))是错误的,并且可能导致最后一行被读取两次。相反,您应该循环到<代码> fGe> /CUT>返回空指针。< /P>您想要使用C或C++?因为您的代码看起来更像是C源代码而不是C++源代码。真的没关系。C和C++都很好。我只想使用STD::CUT和STD::CURR。这就是为什么我会这样做。C++是C++的C++。有什么不对的?我应该用什么?读得很仔细。你想用C或C++?因为你的代码看起来比C源代码更像C源代码。其实没什么。C和C++都很好。我只想用STD::CUT和STD::CURR。这就是为什么我称它为C++。有什么不对?我应该用什么?读T?他非常小心。那么我应该用什么来代替fgets来解决第一个问题呢?@user1762990首先,单独调用fgets()
,然后使用while(feof(file)==0)<代码>循环…@ USE176990:我建议使用C++类,如在我的编辑中。如果你使用<代码> FGES,你需要自己删除尾行,或者将它与包含换行符的字符串进行比较(但是注意文件中的最后一行可能不包含换行符)@H2CO3:这没有帮助,它仍然可以读取最后一行两次。只需查看fgets
的返回值,循环条件中不需要feof
。@Scooter:引用链接:“此程序将始终打印一个大于输入流中字符数的字符(假设没有读取错误)”。在这里的程序中,fgets
读取最后一行,程序将对其进行处理。然后调用feof
并返回0。然后再次调用fgets
。由于它立即遇到文件结尾,因此返回NULL,缓冲区内容不变。然后,代码将再次处理最后一行。只有在这之后,您才能再次调用所有feof
,它返回非零,但是现在已经太迟了。那么我应该使用什么来代替fgets来解决第一个问题呢?@user1762990首先,单独调用fgets()
,然后使用while(feof(file)==0)<代码>循环…@ USE176990:我建议使用C++类,如在我的编辑中。如果你使用<代码> FGES,你需要自己删除尾行,或者将它与包含换行符的字符串进行比较(但是注意文件中的最后一行可能不包含换行符)@H2CO3:这没有帮助,它仍然可以读取最后一行两次。只需查看fgets
的返回值,循环条件中不需要feof
。@Scooter:引用链接:“此程序将始终打印一个大于输入流中字符数的字符(假设没有读取错误)”。在这里的程序中,fgets
读取最后一行,程序将对其进行处理。然后调用feof
并返回0。然后再次调用fgets
。由于它立即遇到文件结尾,因此返回NULL,缓冲区内容不变。然后,代码将再次处理最后一行。只有在这之后,您才能再次调用allfeof
,返回非零,但为时已晚。