C++ Code Snippet (1)

 

 

C++ File Operation
 1 
 2 void FileHandle(string name,string outfile)
 3 {
 4     ifstream in(name.c_str());
 5         ofstream out(outfile.c_str());
 6     
 7     if(in) {
 8         
 9         out << in.rdbuf();
10         
11     }
12     in.close();
13         out.close();
14 }

------------------------------------

时间

#include<time.h>

time_t t = time(NULL);

cout << ctime(&t);

// Thu Oct 07 12:16:08 2010

-------------------------------------

字符串

#include<string>

string str;

assign(string);

append();

c_str();

find_first_of();

substr(int start,int len);

--------------------------------------

目录操作

#include<io.h>

    _finddata_t data;
    long handle = _findfirst(“”,&data); 

 

-----------------------------------------

打印矩阵

n = 4

1      4     5     16

2     3      6     15

9     8      7     14

10   11    12    13

View Code
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int n;
 7     cin >> n;
 8     int **d;
 9     d = new int * [n];
10     for (int i=0;i<n;i++) {
11         d[i] = new int[n];
12     }
13     int count = 1;
14     for (int i = 1;i<=n;i++) {
15         if (i%2 == 1) {
16             for (int j=0;j<i;j++) {
17                 d[i-1][j] = count++;
18             }
19             for (int j=i-2;j>=0;j--) {
20                 d[j][i-1] = count++;
21             }
22         } 
23         else {
24             for (int j=0;j<i;j++) {
25                 d[j][i-1] = count++;
26             }
27             for (int j=i-2;j>=0;j--) {
28                 d[i-1][j] = count++;
29             }
30         }
31     }
32 
33     for (int i=0;i<n;i++) {
34         for (int j=0;j<n;j++) {
35             cout << d[i][j] << "\t";
36         }
37         cout << endl;
38     }
39  
40     cin >> n;
41     return 0;
42 }
方法二
 1     int compute(int i,int j)  
 2     {  
 3         int max = i>j?i:j;  
 4         if (max%2)  
 5             return max*max -max +1 -(i-j);  
 6         else  
 7             return max*max -max +1 +(i-j);   
 8     }  
 9       
10     void printMatrix2(int n)  
11     {  
12         for(int i=1;i<=n;i++)  
13         {  
14             for (int j=1;j<=n;j++)  
15             {  
16                 printf("%2d ", compute(i,j));  
17             }  
18             printf("\n");  
19         }  
20           
21     }  
22       
23     int main(int argc, char* argv[])  
24     {  
25         printMatrix2(6);  
26         return 0;  
27     }  

 

 ------------------------------------------

 最长对称子串

abcdedcbx

 

bcdedcb

 
View Code
 #include <iostream>
 #include <string>
 using namespace std;
 
 int main()
 {
     string str; 
     cin >> str;
 
    int max = 1;
    int r = 0;
    int cur = 1;
    for (int i=0;i<str.length()-1;i++) {
        cur = 1;
        for(int j = 1;j<=str.length()/2+1;j++) {
            if(i-j<0||i+j>=str.length()||(str[i-j] != str[i+j])){
                if(cur > max) {
                    max = cur;
                    r = i - j +1;                    
                }
                break;
            }else {
                cur += 2;
            } 
        }
        if (str[i] == str[i+1]) {
            cur = 2;
            for(int j = 1;j<=str.length()/2+1;j++) {
                if(i-j<0||i+1+j>=str.length()||(str[i-j] != str[i+j])){
                    if(cur > max) {
                        max = cur;
                        r = i - j +1;
                    }
                    break;
                }else{
                    cur += 2;
                }
            }
        }
    }
    cout << "length : " << max  <<endl;
    cout << str.substr(r,max) << endl;
    system("pause");
    return 0;

}

 

-----------------------------------------

 

有一个人站在电影院门口卖票,票价50,一开始手上没有找零的钱,
现在有两种人来买票,A拿着100元的钱,人数为m(m<20),B拿着50元的钱,
人数为n(n<20)。卖票的人必须用从B类人中那里得来钱找给A,所以卖票
的顺序是有限制的。
要求写一个程序打印出所有的买票序列:

例如:m =2 ,n = 3;

BABAB
BBAAB
BBBAA
BBABA

 

 

View Code
 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 char* next(char *s,int n,int m);
 6 
 7 int main()
 8 {
 9     int n = 5, m = 4;
10     char* s = "BABABABAB";
11      
12     cout << s << endl;
13     s = next(s,n,m);
14     while(s != "") {
15         cout << s << endl;
16         s = next(s,n,m);
17     }
18      
19     system("pause");
20     return 0;
21 }
22 
23 char* next(char *s,int n,int m)
24 {
25     char* ns = (char*)malloc(sizeof(char)*(m+n+1));
26     int nc = 0 , mc = 0;
27     int p = n+m-1;
28     
29     while(s[p] == 'A' && p>=0) {
30         p --;
31         mc ++;
32     }
33     while(s[p] == 'B' && p>=0) {
34         p --;
35         nc ++;
36     }
37     if( p < 0 )
38         return "";
39     for(int i=0;i<p;i++)
40         ns[i] = s[i];
41     ns[p] = 'B';
42     ns[p+1] = 'A';
43     p += 2;
44     int x = (n+1-nc) - (m-mc);
45 
46     while(p<m+n) {
47         if(x > 0 && mc >= 0) {
48             ns[p++] = 'A';
49             x --;
50             mc --;
51         }else{
52             ns[p++] = 'B';
53             x ++;
54         }
55 
56     }
57     ns[n+m] = '\0';
58     return ns;
59 }

 

=============================

变长整数编码解码

变长整数编码解码
 1 #include<iostream>   
 2 using namespace std;  
 3  
 4 void vint_encode(char* buf,int num)  
 5 { 
 6     int i = 0;
 7     while(num != 0) {
 8         buf[i] = num % (1 << ((i+1)*7));
 9         num = num /  (1 << ((i+1)*7));
10         if (num != 0
11             buf[i] += 128
12         i++;
13     }
14     buf[i] = '\0'
15         
16 }  
17 
18 int vint_decode(const char* buf)
19 {
20     int sum = 0;
21     char c;
22     for (unsigned int i=0;i<strlen(buf);i++) {
23         c = buf[i] < 0 ?(128 +buf[i]):buf[i];
24         sum += c * (1 << (i*7));
25     }
26     return sum;
27 
28 }
29 
30 
31 
32 int main()  
33 {
34 
35     char* s = new char[20];
36     for (int i=128;i<10000;i*=2) {
37         vint_encode(s,i);
38         cout << vint_decode(s) << endl;
39     }
40     
41 
42     system("pause");
43     return 0;  
44 }  

 

 =============================

 链表基本操作

链表基本操作
  1 #include <iostream>
  2 #include <iomanip>
  3 
  4 using namespace std;
  5 
  6 template <class T>
  7 struct node                         
  8 {
  9     T data;
 10     node *next;
 11 };
 12 
 13 template <class T>
 14 class list
 15 {
 16 public:
 17     list();
 18     void Create();
 19     bool Empty() const;                 //判断链表是否为空
 20     void InsertLast(const T e);
 21     void InsertFirst(const T e);
 22     void DeleteFirst();
 23     void DeleteLast();
 24     void Display() const;
 25     node<T>* GetNode(int i);
 26     void Reverse();
 27     bool Find(const T e);
 28     ~list();                            //销毁链表
 29 private:
 30     node<T> *head;                        //头节点
 31 };
 32 
 33 template <class T>
 34 list<T>::list()
 35 {
 36     head=new node<T>;
 37     head->next=NULL;
 38 }
 39 
 40 template <class T>
 41 void list<T>::Create()
 42 {
 43     node<T> *p,*q;
 44     p=head;
 45     q=new node<T>;
 46     cout<<"Input value( 'ctrl+z'): ";
 47     while(cin>>q->data)
 48     {
 49         p->next=q;
 50         p=q;
 51         q=new node<T>;
 52     }
 53     p->next=NULL;
 54 }
 55 
 56 template <class T>
 57 bool list<T>::Empty()   const
 58 {
 59     return (head->next==NULL);
 60 }
 61 
 62 template <class T>
 63 void list<T>::InsertFirst(const T e)
 64 {
 65     node<T> *p=new node<T>;
 66     p->data=e;
 67     p->next=head->next;
 68     head->next=p;
 69 }
 70 
 71 template <class T>
 72 void list<T>::InsertLast(const T e)
 73 {
 74     node<T> *p,*q;
 75     p=head;
 76     q=new node<T>;
 77     q->data=e;
 78     while(p->next)
 79     {
 80         p=p->next;
 81     }
 82     p->next=q;
 83     q->next=NULL;
 84 }
 85 
 86 template <class T>
 87 void list<T>::DeleteFirst()
 88 {
 89     head->next=head->next->next;
 90 }
 91 
 92 template <class T>
 93 void list<T>::DeleteLast()
 94 {
 95     node<T> *p;
 96     p=head;
 97     while(p->next->next)
 98         p=p->next;
 99     p->next=NULL;
100 }
101 
102 template <class T>
103 void list<T>::Display() const 
104 {
105     node<T> *p;
106     p=head->next;
107     while(p)
108     {
109         cout<<p->data<<" ";
110         p=p->next;
111     }
112 }
113 
114 template <class T>
115 node<T>* list<T>::GetNode(int i)              //返回第i个节点
116 {
117     int k=0;
118     node<T> *p;
119     p=head;
120     while(p && k<i)
121     {
122         p=p->next;
123         ++k;
124     }
125     return p;
126 }
127 
128 template <class T>
129 void list<T>:: Reverse()   
130 {
131     if (!head->next ) {
132         return;
133     }
134     node<T> *p,*q,*r;
135     p= head->next; 
136     q = p->next;
137     p->next = NULL;
138     while (q){
139         r = q->next;
140         q->next = p;
141         p = q;
142         q = r;
143     }
144     head->next = p; 
145  
146 }
147 
148 template <class T>
149 bool list<T>::Find(const T e)   
150 {
151     bool flag=false;
152     node<T> *p;
153     p=head->next;
154     while(p)
155     {
156         if(p->data==e)
157         {
158             flag=true;
159             break;
160         }
161         p=p->next;
162     }
163     return flag;
164 }
165 
166 template <class T>
167 list<T>::~list()
168 {
169     node<T> *p;
170     while(head)
171     {
172         p=head->next;
173         delete head;
174         head=p;
175     }
176 }
177 
178 
179 int main()
180 {
181     list<int> ilist;
182     ilist.Create();        //创建链表
183     ilist.Display();       //输出链表
184     cout<<endl;
185     ilist.InsertFirst(123); //从头插入一个值
186     ilist.InsertLast(456); //从尾插入一个值
187     ilist.Display();
188     cout<<endl;
189     if(ilist.Find(123))
190         cout<<"123 在链表中"<<endl;
191     else
192         cout<<"123 不在链表中"<<endl;
193     ilist.DeleteFirst();   //从头删除一个值
194     ilist.DeleteLast();    //从尾删除一个值
195     ilist.Display();
196     cout<<endl;
197     cout << "=============="<<endl;
198     ilist.Reverse();       //逆序
199     ilist.Display();
200     cout<<endl;
201     system("pause");
202     return 0;
203 }

 

 

 

posted @ 2010-10-07 15:29  Keosu  阅读(625)  评论(0编辑  收藏  举报