2017-04-15 16:22:35 baidu_24281959 阅读数 1174
  • 征服C++ 11视频精讲

    扫码进入学习群,领取学习资料+讲师答疑 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。

    78474 人正在学习 去看看 李宁

Input:

#include <stdio.h>
#include "hello.h"

unsigned int foo(){vector<vector<string>> a;return 1;}
int main() {
    while(true){int a=0;for(; a<10;a++) {
        if(true==true)
    cout<<a;cout<<a;}}
    return 0;}
Output:

#include <stdio.h>
#include "hello.h"

unsigned int foo(){
    vector<vector<string>> a;
    return 1;
}
int main() {
    while(true){
        int a=0;
        for(; a<10; a++) {
            if(true == true)
                cout<<a;
            cout<<a;
        }
    }
    return 0;
}

SourceCode Start Here:

Function: Indents your code to a generally accepted style.

#include <algorithm>
#include <functional>
#include <iostream>
#include <fstream>
#include <stack>
#include <ctype.h>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;

void removeCharacter(string &str, char c){
    string::iterator new_end = remove_if(str.begin(), str.end(), bind2nd(equal_to<char>(),c));
    str.erase(new_end, str.end());
}

bool inBracket(string str, string::size_type current_pos){
	stack<char> tmpStack;
	for(string::size_type pos(0); pos!=current_pos; pos++){     
		if(str.at(pos) == '(') {
			tmpStack.push('(');
		} else if(str.at(pos) == ')') {
			tmpStack.pop();
		} else {
			continue;
		}
	}
	if(tmpStack.empty()){
		return false;
	}
	return true;
}

void replace_all_string(string& str, const string old_value, const string new_value, int add_condition=0){     
	switch(add_condition){
		case 0: // force replacement without check
			for(string::size_type pos(0); pos!=string::npos; pos+=new_value.length()){     
				if((pos=str.find(old_value,pos))!=string::npos){  
					str.replace(pos, old_value.length(), new_value);
				} else {
					break;
				}
			}
			break;
		case 1: // Right return Check
			for(string::size_type pos(0); pos!=string::npos; pos+=new_value.length()){     
				if((pos=str.find(old_value,pos))!=string::npos){
					if(str[pos+1]!='\r' && str[pos+1]!='\n' && str[pos+1]!=';')     
						str.replace(pos, old_value.length(), new_value);
				} else {
					break;
				}
			}
			break;
		case 2: // semicolon
			for(string::size_type pos(0); pos!=string::npos; pos+=new_value.length()){     
				if((pos=str.find(old_value,pos))!=string::npos){
					if(!inBracket(str, pos)){
						if(str[pos+1]!='\r' && str[pos+1]!='\n')
							str.replace(pos, old_value.length(), new_value);
					}
					else if(str[pos+1] != ' ')
						str.replace(pos, old_value.length(), old_value+" ");
					else
						continue;
				} else {
					break;
				}
			}
			break;
		case 3: // Operators' Block existence check
			for(string::size_type pos(0); pos!=string::npos; pos+=new_value.length()){     
				if((pos=str.find(old_value,pos))!=string::npos){
					if((old_value.length()>=2 || (str[pos]!=str[pos+1] && str[pos]!=str[pos-1])) 
						&& str[pos-1] != ' ' && str[pos+1] != ' ')     
						str.replace(pos, old_value.length(), new_value);
				} else {
					break;
				}
			}
			break;
		default:
			break;
	}	  
}

// We didn't list all of the keyword of C standard Lib.
// If u want, just add them into the suitable string vector.
// **Please Notice**
// We didn't do any syntax check before reconfiguration.
void Normalization(vector<string> &fileStringVector){
	cout << "Please Notice:" << endl;
	cout << "We didn't do any syntax check before reconfiguration.\n" << endl;
	string operators[] = {"+", "-", "%", "&", "!=", "==", "&&", "||"};
	string keywords_rightreturn[] = {"{", "}"};
	int dim_operators = sizeof(operators) / sizeof(operators[0]);
	int dim_keywords_rightreturn = sizeof(keywords_rightreturn) / sizeof(keywords_rightreturn[0]);
	vector<string>::iterator iter;
	for(iter = fileStringVector.begin(); iter != fileStringVector.end(); iter++){
		for(int i = 0; i < dim_operators; i++){
			replace_all_string(*iter, operators[i], " "+operators[i]+" ", 3);
		}
		for(int i = 0; i < dim_keywords_rightreturn; i++){
			replace_all_string(*iter, keywords_rightreturn[i], keywords_rightreturn[i]+"\n", 1);
		}
		replace_all_string(*iter, ";", ";\n", 2);
	}
}

void Indentation(vector<string> &fileStringVector){
	vector<string>::iterator iter;
	int depth = 0;
	for(iter = fileStringVector.begin(); iter != fileStringVector.end(); iter++){
		int loc_r = (*iter).rfind("}", (*iter).length()-1);
		if(loc_r != string::npos){
			depth -= 1;
		}
		for(int i = 0; i < depth; i++){
			*iter = "\t" + *iter;
		}
		int loc_l = (*iter).find("{", 0);
		if(loc_l != string::npos){
			depth += 1;
		}
		int loc = (*iter).find(")", 0);
		if(loc != string::npos &&
			((*iter).find("for", 0) != string::npos ||
			 (*iter).find("if", 0) != string::npos ||
	 		 (*iter).find("while", 0) != string::npos ||
		   	 (*iter).find("else if", 0) != string::npos)){
			if( (*iter).find("{") == string::npos){
				depth += 1;
				iter++;
				if((*iter).find("{", 0) != string::npos){
					depth -= 1;
					for(int i = 0; i < depth; i++){
						*iter = "\t" + *iter;
					}
					depth +=1;
				} else {
					for(int i = 0; i < depth; i++){
						*iter = "\t" + *iter;
					}
					depth -=1;
				}
			}
		}
		if((*iter).find("else") != string::npos && (*iter).find("{") == string::npos){
			depth += 1;
			iter++;
			if((*iter).find("{", 0) != string::npos){
				depth -= 1;
				for(int i = 0; i < depth; i++){
					*iter = "\t" + *iter;
				}
				depth +=1;
			} else {
				for(int i = 0; i < depth; i++){
					*iter = "\t" + *iter;
				}
				depth -=1;
			}
		}
	}
}


main.cpp

/*
 * Author : shuanholmes@outlook.com
*/

#include "code_indentation.hpp"

int main(){
	char inputFilePath[] = "./data/test.c";
	char outputFilePath[] = "./data/normalization_test.c";
	ifstream inFile(inputFilePath,ios::in|ios::binary);
	ofstream tmp_outFile("./data/tmp.c",ios::out|ios::binary);
	ofstream outFile(outputFilePath,ios::out|ios::binary);
	vector<string> fileStringVector;
	string tmpString;
	// readlines -> vector
	while(getline(inFile, tmpString)){
		replace_all_string(tmpString, "    ", "\t"); // 4*block -> '\t'
		removeCharacter(tmpString, '\t');
		replace_all_string(tmpString, "   ", "\t"); // 3*block -> '\t'
		removeCharacter(tmpString, '\t');
		replace_all_string(tmpString, "  ", "\t"); // 2*block -> '\t'
		removeCharacter(tmpString, '\t');
		fileStringVector.push_back(tmpString);
	}
	Normalization(fileStringVector);
	vector<string>::iterator iter;
	for(iter = fileStringVector.begin(); iter != fileStringVector.end(); iter++ ){
		tmp_outFile << *iter << "\n";
		// cout << *iter << "\n";
	}
	// tmp.c temporary file
	inFile.close();
	tmp_outFile.close();
	fileStringVector.clear();
	ifstream tmp_inFile("./data/tmp.c",ios::in|ios::binary);
	while(getline(tmp_inFile, tmpString)){
		fileStringVector.push_back(tmpString);
	}
	Indentation(fileStringVector);
	for(iter = fileStringVector.begin(); iter != fileStringVector.end(); iter++ ){
		replace_all_string(*iter, "\t", "    ");
		outFile << *iter << "\n";
		cout << *iter << endl;
	}
	tmp_inFile.close();
	outFile.close();
	// remove("./data/tmp.c");
	return 0;
}

2018-09-10 23:07:05 lezeqe 阅读数 411
  • 征服C++ 11视频精讲

    扫码进入学习群,领取学习资料+讲师答疑 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。

    78474 人正在学习 去看看 李宁

下载地址

 

 

 

 

 

 

2010-07-17 08:40:00 hunancjz 阅读数 689
  • 征服C++ 11视频精讲

    扫码进入学习群,领取学习资料+讲师答疑 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。

    78474 人正在学习 去看看 李宁

免费多平台C/C++集成开发环境Dev-C++简介及下载

  Dev-C++是一个C&C++开发工具,它是一款自由软件,遵守GPL协议。它集合了GCC、MinGW32等众多自由软件,并且可以从 devpak.org上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必须遵守GNU协议。

  Dev-C++每一天都在进步着,因为它是一个自由软件。 Dev-C++是一个非常实用的编程软件,多款著名软件均由它编写而成,它在C的基础上,增强了逻辑性。

  C语言是1972年由美国贝尔实验室(AT&TBell)的D.M.Ritchie研制成功的。它不是为了初学者设计的,而是为计算机专业人员设计的。最初它是作为写UNIX操作系统的一种工具,在贝尔实验室内部使用。后来C语言不断改进,人们发现它功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多优点,特别适合于写系统软件,因此C语言从实验室走向美国,从美国走向世界。到20世纪70年代,它已风靡全世界。无论是在中国还是在外国,C语言都成为了计算机开发人员的基本功。

  但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用C语言还是比较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序的设计方法就显出它的不足。

  为了解决软件设计的危机,在20世纪80年代,人们提出了面向对象的程序设计(object oriented programming,OOP),需要设计出能支持面向对象的程序设计方法的新的语言。在实践中,人们发现由于C语言是如此的深入人心,使用如此广泛,面对程序设计方法的革命,最好的办法不是另外发明一种语言去代替它,而是在它原有的基础上加以发展。在这种形式下,C++应运而生。C++是由贝尔实验室(AT&TBell)的Bjarne Stroustrup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。

  AT&T发布的第一个Dev-C++编译系统实际上是一个预编译器(前端编译器),真正的Dev-C++程序是在1988年诞生的。

  Dev-C++目前是NOI、NOIP等比赛的制定工具,唯一的缺点就是Debug功能过弱。

项目首页:
http://sourceforge.net/projects/dev-cpp/
下载:http://sourceforge.net/projects/dev-cpp/files/


目前最新版 4.9.9.2,建议下载 devcpp-4.9.9.2_setup.exe
2014-07-03 10:57:57 v_xchen_v 阅读数 663
  • 征服C++ 11视频精讲

    扫码进入学习群,领取学习资料+讲师答疑 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。

    78474 人正在学习 去看看 李宁

轻量级C++运行环境:

DEV C++(无须配置)


下载地址:

http://download.csdn.net/detail/v_xchen_v/7586071


2016-03-30 13:53:56 Sico2Sico 阅读数 261
  • 征服C++ 11视频精讲

    扫码进入学习群,领取学习资料+讲师答疑 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。

    78474 人正在学习 去看看 李宁
#include<iostream>
using namespace std;


class auto_pint{
    class node{
        public:
        int ref_count=0;
        int number=0;
    };
    node * p =nullptr;
    public:
    auto_pint()=default;
    auto_pint(int * pint){
        p = new node();
        p->number = *pint;
        p->ref_count++;
        cout<<p->number<<"引用计数++"<<endl;
    }
    auto_pint(auto_pint & ap)
    {
        if(ap.p){
            p = ap.p;
            p->ref_count++;
        cout<<p->number<<"引用计数++"<<endl;
        }
    }
    ~auto_pint()
    {
        cout<<p->number<<"引用计数--"<<endl;
        if(--p->ref_count == 0){
            cout<<p->number<<"被释放"<<endl;
            delete p;
        }
    }
    int& operator *()
    {
        return p->number;
    }
    auto_pint & operator=(auto_pint & ap)
    {
        //原有的指针对象是否指向了有效数据,如果是,要先减减原来的引用计数
        if(p){
        cout<<p->number<<"引用计数--"<<endl;
            if(--p->ref_count ==0){
            cout<<p->number<<"被释放"<<endl;
                delete p;
            }
        }
        p = ap.p;
        if(p){
            p->ref_count++;
        cout<<p->number<<"引用计数++"<<endl;
        }
    }
};

int main()
{
    auto_pint ap1(new int(100));
    auto_pint ap2(new int (200));
    ap1 = ap2 ;
//  *ap1 = 900;
    auto_pint ap3(ap2);
    cout<<*ap3<<endl;

#if 0
    int * p1 =new int(100);
    int * p2 =new int(200);
    p1 = p2;
    *p1 =900;
    int *p3(p2);
    cout<<*p3<<endl;
#endif
}

C++智能指针总结

阅读数 174

c++智能指针

博文 来自: gunqu_d
没有更多推荐了,返回首页