有什么方法可以编写一个返回C ++文件中使用的所有指针变量名的方法。
例如:c ++文件(abc.cpp)
.......
//some code here
.....
emp* emp1 = do_something();
int a = 10;
student* std1 = getdata();
... ..
当我解析这个文件(abc.cpp)时,我应该在输出中得到两个变量。
EMP1 STD1
有没有一些内置的方法/过程可以告诉变量的类型,只列出变量的指针类型。
由于
答案 0 :(得分:1)
在C ++本身中没有内置的方法或程序。但是,您可以找到一个开源的c ++解析器并使用它来执行此操作。
关于此问题的堆栈溢出讨论:Good tools for creating a C/C++ parser/analyzer
答案 1 :(得分:0)
没有这样的事情。您必须打开文件并解析它的内容以找出您想要找到的内容。您可以使用Boost Regular Expressions执行此操作。
答案 2 :(得分:0)
当然,使用标准C ++工具无法做到这一点。我做这项工作的理论将是:
将整个.cpp读入std :: string:
std::ifstream ifs("filename.cpp");
std::string str((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>());
找到放在'*'和'='符号之间的字符串中的所有字符串,并将它们放在数组std :: vector中 - 确定它是非常粗略的算法但是适用于简单的任务;
< / LI>答案 3 :(得分:0)
以下是代码:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>
#include <set>
#include <cctype>
using namespace std;
vector< string > types;
set< string > names;
int main() {
types.push_back( "int" );
types.push_back( "char" );
types.push_back( "float" );
types.push_back( "double" );
types.push_back( "bool" );
types.push_back( "unsigned" );
types.push_back( "long" );
types.push_back( "short" );
types.push_back( "wchar_t" );
// ect
fstream in( "input.cpp", fstream::in );
string row;
string tmp;
while( in >> tmp ) {
if( tmp == "struct" || tmp == "class" ) {
in >> tmp;
string::iterator it = find( tmp.begin(), tmp.end(), '{' );
tmp.erase( it, tmp.end() );
types.push_back( tmp );
}
row += tmp;
}
for( int i=0; i<types.size(); ++i ) {
int it=-1;
while( ( it=row.find( types[ i ], it+1 ) ) ) {
if( it == -1 ) break;
int spos;
for( spos=it; row[ spos ] != '*'; ++spos );
spos++;
string ptr;
while( ( isalnum( ( int )row[ spos ] ) || row[ spos ] == '_' ) && spos < row.size() ) {
ptr += row[ spos ];
spos++;
}
names.insert( ptr );
}
}
for( set< string >::iterator i=names.begin(); i!=names.end(); ++i ) {
cout << *i << " ";
}
return 0;
}
我基本上做的是,我将整个输入程序放入一行,没有空格,然后检查用户定义的结构或类,我将其插入到类型向量中,最后我搜索每种类型(如果存在)行中<type>*
形式的内容。然后,我打印出来。