在文件中搜索printf语句并用字符串值替换

时间:2012-06-17 17:55:17

标签: c++ stringstream dev-c++

我正在尝试用字符串值替换所有printf语句。首先,我正在读取所有行到字符串,如下所示:

 ifstream ifs;
 ifs.open(filename);
 string temp;
 string text;
 while(!ifs.eof())
 {
     getline(ifs, temp, '\t');
     text.append(temp);
     temp.clear();
 }

然后我找到printf的每一行,如果它找到了,而不是用"printf statement"替换它。  我的替换printf的代码:

char ch;
while(getline(is,check))
{
 ch=check[0];
    if(!isalpha(ch))
     {
      //statements..
     }
    else
     {
        string str2("printf");
        size_t found;
        found=check.find(str2);
           if(found!=string::npos)
              check="\n printf statement.\n";
       OriginalStr.append(check);

         check.clear();
     }

它适用于以下三个四行文件:

main()
{
Hi i am Adityaram.
and i am good boy.
and you?
printf("");
{
printf("");
Aditya
printf("");
Rammm
printf("");
Kumar
printf("");
{
printf("");

printf("");
}
printf("");
}
printf("");

但没有在这些文件行中找到printf行。

main()
{
   char ch, file_name[25],*p;
   char answer[400];
   int size=0;
   FILE *fp;

   printf("Enter the name of file you wish to see ");
   gets(file_name);
}

为什么找不到printf线?或怎么办? 任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于这是一个C程序,你可能有以下行:

{

}

即。打开/关闭一个街区。这绝对不是空的,但它只包含1个字符。在你的while i<6中,你将在这个缓冲区结束后继续前行。所以,添加一个i小于缓冲区长度的检查。

然后可能会发生printf不一定是该行中的第一个表达式,例如:

if(something) printf("this");

您的代码没有提到这一点。您需要在wd中检查“printf”作为子字符串。查看http://www.cplusplus.com/reference/string/string/find/以获取有关在字符串中查找字符串的参考。

最后但并非最不重要的是,我不明白为什么你希望你的行以字母开头(检查isalpha)。这将无法更改

之类的代码
{ printf("this"); }

它适用于小型测试文件的原因是因为你很可能编写它们来传递你的内部“测试”,但是大文件通常包含更广泛使用的printf文件。

此外,缩进不是必须使用制表符(\ t),它可能是简单的空格。

答案 1 :(得分:0)

我通过这种简单的方式得到它:

string RemovePrintf(string value)
{
     string RemovedPrintf,strP;
     size_t poss;
     value.insert(0," ");//insert a white-space, cause  find method not returning position if it present at begin of string.
     poss = value.find("printf");    // position of "printf" in str
     strP = ""; // get insert whitespace at "printf line".
     strP.resize(strP.length());
     if((int)poss > 0)
      RemovedPrintf.append(strP);
     else
      RemovedPrintf.append(value);
     strP.clear();
     RemovedPrintf.resize(RemovedPrintf.length());
     return RemovedPrintf;
}

这适用于小文件和大文件。 顺便说一句,感谢您回答我的问题。