下面是程序:
if __name__=='__main__': file_name = raw_input('Input the file you want to find in:') try: in_file = open(file_name,'r') lines = in_file.readlines() tag_tok = '' while tag_tok.upper() != 'Q': tag_tok = raw_input('Input the word you want to find(Q for quit):') if tag_tok.upper() != 'Q': count = 0 line_no = 0 for line in lines: line_no = line_no + 1 inline_cnt = line.count(tag_tok) count = count + inline_cnt if inline_cnt > 0: print 'Find %s %d time(s) in line :%d'%(tag_tok,inline_cnt,line_no) print line print '---------------------------------' print 'Total fount %s %d time(s)'%(tag_tok, count) except: print "Can't open file %s"%(file_name)
但是,这个网友还不满足非要一个 C++的程序,理由是他们老师不会python , 正好我也想试试用C++解决和python做下对比:
#include #include #include #include #include using namespace std; int BruteFind(const char *x, int m, const char *y, int n ,vector& colpos) { int i, j, cnt=0; /* Searching */ for (j = 0; j <= n - m; ++j) { for (i = 0; i < m && x == y[i + j]; ++i); if (i >= m){ colpos[cnt++] = j; if(cnt == colpos.size()) colpos.resize(cnt * 2); } } return cnt; } int count_string(string source, string tag, vector& colpos){ int find_cnt = 0; find_cnt = BruteFind(tag.c_str(), tag.size(), source.c_str(),source.size(),colpos); return find_cnt; } int main(){ string file_name, line; vector lines; lines.resize(10); cout << "Input the file name:"; cin >> file_name; ifstream in_file; try{ in_file.open(file_name.c_str()); if(!in_file) throw(file_name); } catch(string file_name){ cout << "Fatal error: File not found."< exit(1); } int line_count = 0; do{ getline(in_file, lines[line_count]); line_count ++; if(line_count == lines.size()){ lines.resize(line_count * 2); } }while(in_file.eof()==0); string tag_tok; vector colpos; colpos.resize(10); do{ cout << "Input the word you want to find(Q for quit):"; cin >> tag_tok; if(tag_tok == "Q"){ break; } int count = 0, line_no = 0 , inline_count; for(line_no = 0 ;line_no < line_count ; line_no++){ inline_count = count_string(lines[line_no], tag_tok, colpos); count += inline_count; if(inline_count > 0){ cout << "Find " << tag_tok << " " << inline_count << " time(s) in line " << line_no ; cout << " , column pos is ( "; for(int i = 0 ;i< inline_count ;i++){ cout << colpos << ' '; } cout << " )" << endl; cout << lines[line_no] << endl; } } cout << "--------------------------------" < cout << "Total fount " << tag_tok << " " << count << " time(s)" << endl; }while(tag_tok != "Q"); in_file.close(); return 0; }
这个程序用了30分钟。
从程序长度和编程时间上,粗略对比下:
Python 5 分钟 22行
C++ 30 分钟 60多行
从这个简单的例子中可以大体看到 脚本语言与C++语言中在开发时的差异了。