#include <iostream>
#include <fstream>
#include <cstring>
#define MAX_CHARS_PER_LINE 512
#define MAX_TOKENS_PER_LINE 20
#define DELIMITER " "
using namespace std;
int main ()
{
//char buf[MAX_CHARS_PER_LINE];
string buf; // string to store a line in file
fstream fin;
ofstream fout;
fin.open("PiCalculator.h", ios::in);
fout.open("op1.txt", ios::out);
fout<< "#include \"PiCalculator.h\"\n";
static int flag=0; //this variable counts the no of curly brackets
while (!fin.eof())
{
// read an entire line into memory
getline(fin, buf);
//fout<<buf.back()<<endl;
if(buf.back()== "{" && buf.front() !='c'){
flag++;
fout<<buf<<endl;
}
if(flag > 0)
fout<<buf<<endl;
if(buf.back()== "}"){
flag--;
fout<<buf<<endl;
}
}
cout<<buf.back()<<endl;
return 0;
}
这里我收到if条件中的错误:
if(buf.back()== "{" && buf.front() !='c')
错误说明:ISO C ++禁止在指针和整数[-fpermissive]
之间进行比较任何人都可以帮我解决问题吗?
答案 0 :(得分:1)
由于您检查bug.back的“{”和bug.front的“c”,您的比较可能无效。我假设后面和前面函数返回的类型必须相同。一个是单引号,另一个是“{”是双引号。那就是问题。
将“{”更改为“{”
希望这有帮助。
答案 1 :(得分:1)
正如Samuel所说,std :: string :: back返回一个char&amp ;; (例如,请参阅http://en.cppreference.com/w/cpp/string/basic_string/back),然后将其与字符串文字进行比较(双引号表示字符串,单引号为char)。
在这种情况下,为什么没有必要拥有#include <string>
指令并不清楚,但最佳做法是这样做。但是,您需要<cstring>
并不明显。
我建议编写警告;如果我以这种方式编译你的代码,我得到相当有用的错误消息:
g++ -Wall -Wextra -std=c++11 q3.cc -o q3
q3.cc: In function ‘int main()’:
q3.cc:24:25: warning: comparison with string literal results in unspecified behaviour [-Waddress]
if(buf.back()== "{" && buf.front() !='c'){
^
q3.cc:24:25: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
q3.cc:30:25: warning: comparison with string literal results in unspecified behaviour [-Waddress]
if(buf.back()== "}"){
^
q3.cc:30:25: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
这是gcc版本4.8.2。
答案 2 :(得分:0)
buf.back()
返回char或char&amp;。
您要比较的是字符串文字“{”,它不起作用。
将此行更改为(以及与字符串文字比较的所有其他行:
if(buf.back()== '{' && buf.front() !='c'){
注意'{'
答案 3 :(得分:0)
buf.back()== "{"
字符串文字"{"
衰减成指针,buf.back()返回int
,因此你得到错误
请将其更改为
buf.back() == '{'