zoukankan      html  css  js  c++  java
  • 重新实践c++primer上面的代码

    又重新敲了敲c++primer上面的代码,觉得很有意思,讲的很细,c++真牛逼啊

      1 #include <iostream>
      2 #include <string>
      3 #include <cctype>
      4 #include <vector>
      5 #include <cassert>
      6 using namespace std;
      7 using std::ostringstream;
      8 
      9 int Add()
     10 {
     11     cout << "enter two numbers" << endl;
     12 
     13     int v1 = 0, v2 = 0;
     14     cin >> v1 >> v2;
     15     cout << "the sum of" << v1 << "and" << v2
     16         << "is" << v1 + v2 << endl;
     17     return 0;
     18 }
     19 
     20 int Unsigned()
     21 {
     22     unsigned u = 10, u2 = 42;
     23     cout << u2 - u << endl;
     24     cout << u - u2 << endl;
     25 
     26     int i = 10, i1 = 42;
     27     cout << i - i1 << endl;
     28     cout << i1 - i << endl;
     29 
     30     u = 42;
     31     i = 10;
     32     cout << i - u << endl;
     33     cout << u - i << endl;
     34 
     35     u = 10;
     36     i = -42;
     37     cout << i + i << endl;
     38     cout << u + i << endl;
     39 
     40 //     u = 10;
     41 //     cout << "hehe" << endl;
     42 //     while (u >= 0)
     43 //     {
     44 //         cout << u << endl;
     45 //         u--;
     46 //     }
     47     return 0;
     48 }
     49 
     50 int reused = 42;
     51 
     52 int Scope_Levels()
     53 {
     54     int unique = 0;
     55     
     56     cout << reused << "" << unique << endl;
     57     int reused = 0;
     58     cout << reused << "" << unique << endl;
     59     cout << ::reused << "" << unique << endl;
     60     return 0;
     61 }
     62 
     63 int ReferenceTest()
     64 {
     65     int i = 0, &ri = i;
     66 
     67     cout << i << " " << ri << endl;
     68     i = 4;
     69     cout << i << " " << ri << endl;
     70 
     71     ri = 10;
     72     cout << i << "  " << ri << endl;
     73     
     74     return 0;
     75 }
     76 
     77 int CompoundRef()
     78 {
     79     int i = 1024, *p = &i, &r = i;
     80     cout << i << " " << *p << " " << r << endl;
     81 
     82     int j = 42, *p2 = &j;
     83     int *&pref = p2;
     84     cout << *pref << endl;
     85 
     86     pref = &i;
     87     cout << *pref << endl;
     88 
     89     *pref = 0;
     90     cout << i << " " << *pref << " " << *p2 << endl;
     91 
     92     return 0;
     93 }
     94 
     95 // int Convs()
     96 // {
     97 //     int i = 42;
     98 //     cout << i << endl;
     99 // 
    100 //     if (i)
    101 //         i = 0;
    102 //     cout << i << endl;
    103 // 
    104 //     bool b = 42;
    105 //     cout << b << endl;
    106 // 
    107 //     int j = b;
    108 //     cout << j << endl;
    109 // 
    110 //     double pi = 3.14;
    111 //     cout << pi << endl;
    112 // 
    113 //     j = pi;
    114 //     cout << j << endl;
    115 // 
    116 //     unsigned char c = -1;
    117 //     i = c;
    118 //     cout << i << endl;
    119 //     
    120 //     return 0;
    121 // }
    122 
    123 int TestDoublePtr()
    124 {
    125     int ival = 1024;
    126     int* pi = &ival;
    127     int** ppi = &pi;
    128 
    129     cout << ival << "   " << *pi << "    " << **ppi << endl;
    130 
    131     int i = 2;
    132     int* p1 = &i;
    133 
    134     *p1 = *p1 * *p1;
    135     cout << "i = " << i << endl;
    136 
    137     *p1 *= *p1;
    138     cout << "i = " << i << endl;
    139     return 0;
    140 }
    141 
    142 int TestDecltype()
    143 {
    144     int a = 0;
    145     decltype(a) c = a;
    146     decltype((a)) d = a;
    147 
    148     c++;
    149     cout << "a" << a << "c" << c << "d" << d << endl;
    150 
    151     d++;
    152     cout << "a" << a << "c" << c << "d" << d << endl;
    153 
    154     int A = 0, B = 0;
    155     decltype((A)) C = A;
    156     decltype(A = B) D = A;
    157 
    158     C++;
    159     cout << A << C << D << endl;
    160     D++;
    161     cout << A << C << D << endl;
    162 
    163     return 0;
    164 }
    165 
    166 int TestCctype()
    167 {
    168     string s("Hello World!!!");
    169     //     for (auto c : s)
    170     //         cout << c << endl;
    171 
    172     string::size_type punct_cnt = 0;
    173     for (string::size_type c = 0; c != s.size(); c++)
    174         if (ispunct(s[c]))
    175             ++punct_cnt;
    176     cout << punct_cnt << "        " << s << endl;
    177 
    178     string orig = s;
    179     for (string::size_type c = 0; c != s.size(); c++)
    180         s[c] = toupper(s[c]);
    181     cout << s << endl;
    182 
    183     s = orig;
    184     string::size_type index = 0;
    185     while (index != s.size() && !isspace(s[index]))
    186     {
    187         s[index] = toupper(s[index]);
    188         index++;
    189     }
    190     cout << s << endl;
    191 
    192     return 0;
    193 }
    194 
    195 int TestArrayScores()
    196 {
    197     vector<unsigned> grades;
    198     const size_t sz = 11;
    199     unsigned scores[sz] = {};
    200     unsigned grade;
    201 
    202     while(cin >> grade)
    203     {
    204         if (grade <= 100)
    205             scores[grade / 10]++;
    206         grades.push_back(grade);
    207     }
    208     cout << "grades.size = " << grades.size() << endl;
    209 
    210     for (vector<unsigned>::const_iterator g = grades.begin(); g != grades.end(); g++)
    211         cout << *g << " ";
    212     cout << endl;
    213 
    214     for (size_t i = 0; i != sz; i++)
    215         cout << scores[i] << " ";
    216     cout << endl;
    217     return 0;
    218 
    219 }
    220 
    221 int TestGetline()
    222 {
    223     string line;
    224     while (getline(cin, line))
    225         cout << line << endl;
    226     return 0;
    227 }
    228 
    229 int TestCstring()
    230 {
    231     string s1 = "A string example";
    232     string s2 = "A different string";
    233 
    234     if (s1 < s2)
    235         cout << s1 << endl;
    236     else
    237         cout << s2 << endl;
    238 
    239     const char ca1[] = "A string example";
    240     const char ca2[] = "A string example";
    241 
    242     if (strcmp(ca1, ca2) < 0)
    243         cout << ca1 << endl;
    244     else
    245         cout << ca2 << endl;
    246 
    247     const char *cp1 = ca1, *cp2 = ca2;
    248     cout << strcmp(cp1, cp2) << endl;
    249     cout << strcmp(cp2, cp1) << endl;
    250     cout << strcmp(cp1, cp1) << endl;
    251 
    252     cout << strlen(cp1) << endl;
    253 
    254     const unsigned sz = 16 + 18 + 2;
    255     //char largeStr[sz];
    256     //pass
    257     return 0;
    258 }
    259 
    260 int TestIterator()
    261 {
    262     string str("some string"), orig = str;
    263     if (!str.empty())
    264         cout << str[0] << endl;
    265     if (!str.empty())
    266         str[0] = toupper(str[0]);
    267     cout << str << endl;
    268 
    269     str = orig;
    270 
    271     if (str.begin() != str.end()) 
    272     {
    273         string::iterator it = str.begin();
    274         *it = toupper(*it);
    275     }
    276     cout << str << endl;
    277 
    278     str = orig;
    279     for (string::size_type index = 0; index != str.size() && !isspace(str[index]); index++)
    280         str[index] = toupper(str[index]);
    281     cout << str << endl;
    282 
    283     str = orig;
    284     for (string::iterator it = str.begin(); it != str.end() && !isspace(*it); it++)
    285         *it = toupper(*it);
    286     cout << str << endl;
    287 
    288     str = orig;
    289     string::size_type index = 0;
    290     while (index != str.size() && !isspace(str[index]))
    291     {
    292         str[index] = toupper(str[index]);
    293         index++;
    294     }
    295     cout << str << endl;
    296 
    297     string::iterator beg = str.begin();
    298     while (beg != str.end() && !isspace(*beg))
    299     {
    300         *beg = toupper(*beg);
    301         beg++;
    302     }
    303     cout << str << endl;
    304 
    305     str = orig;
    306     for (string::const_iterator c = str.begin(); c != str.end(); c++)
    307         cout << *c;
    308     cout << endl;
    309     for (string::iterator c = str.begin(); c != str.end(); c++)
    310         *c = '*';
    311     cout << str << endl;
    312 
    313     str = orig;
    314     for (string::size_type ix = 0; ix != str.size(); ix++)
    315         cout << str[ix];
    316     for (string::size_type ix = 0; ix != str.size(); ++ix)
    317         str[ix] = '*'; 
    318     cout << str << endl;
    319 
    320     return 0;
    321 
    322 }
    323 
    324 int arr[10];
    325 int *p1[10];
    326 int(*p2)[10] = &arr;
    327 
    328 typedef int arrT[10];
    329 
    330 arrT* func(int i);
    331 int(*func(int i))[10];
    332 
    333 int odd[] = { 1, 3, 5, 7, 9 };
    334 int even[] = { 0, 2, 4, 6, 8 };
    335 
    336 int* elemPtr(int i)
    337 {
    338     return (i % 2) ? odd : even;
    339 }
    340 
    341 int(*arrPtr(int i))[5]    
    342 {
    343     return (i % 2) ? &odd : &even;
    344 }
    345 
    346 int (&arrRef(int i))[5]
    347 {
    348     return (i % 2) ? odd : even;
    349 }
    350 
    351 int TestBefore1()
    352 {
    353     int* p = elemPtr(6);
    354     int(*arrP)[5] = arrPtr(5);
    355     int(&arrR)[5] = arrRef(4);
    356 
    357     for (size_t i = 0; i < 5; i++)
    358         cout << p[i];
    359     cout << endl;
    360     for (size_t i = 0; i < 5; i++)
    361         cout << (*arrP)[i];
    362     cout << endl;
    363     for (size_t i = 0; i < 5; i++)
    364         cout << arrR[i];
    365     return 0;
    366 }
    367 
    368 // struct ErrCode 
    369 // {
    370 //     ErrCode(int i) : num(i) {}
    371 //     string msg()
    372 //     {
    373 //         ostringstream s;
    374 //         s << "ErrCode" << num;
    375 //         return s.str();
    376 //     }
    377 //     int num;
    378 // };
    379 
    380 string::size_type sumLength(const string&, const string&);
    381 string::size_type latgerLength(const string&, const string&);
    382 
    383 string::size_type sumLength(const string& s1, const string& s2)
    384 {
    385     return s1.size() + s2.size();
    386 }
    387 
    388 string::size_type largerLength(const string& s1, const string& s2)
    389 {
    390     return (s1.size() > s2.size()) ? s1.size() : s2.size();
    391 }
    392 
    393 string::size_type(*getFcn(const string& fetch))(const string&, const string&)
    394 {
    395     if (fetch == "sum")
    396         return sumLength;
    397     return largerLength;
    398 }
    399 
    400 int TestBefore2()
    401 {
    402     cout << getFcn("sum")("hello", "world") << endl;
    403     cout << getFcn("larger")("hello", "world") << endl;
    404     return 0;
    405 }
    406 
    407 inline const string&
    408 shorterString(const string& s1, const string& s2)
    409 {
    410     return s1.size() <= s2.size() ? s1 : s2;
    411 }
    412 
    413 int TestBefore3()
    414 {
    415     string s1("successes"), s2("failure");
    416     cout << shorterString(s1, s2) << endl;
    417     cout << shorterString(s1, s2).size() << endl;
    418     cout << (s1.size() < s2.size() ? s1 : s2) << endl;
    419     return 0;
    420 }
    421 
    422 void print(const int ia[], size_t size)
    423 {
    424 #ifndef NDEBUG
    425     cerr << "print(int *, size_t)" << "  " << size << endl;
    426 #endif
    427 }
    428 
    429 int TestErrorDeal()
    430 {
    431     string word = "foo";
    432     const string::size_type threshold = 5;
    433     if (word.size() < threshold)
    434         cerr << "Error: " << __FILE__
    435         << " : in function " << TestErrorDeal
    436         << " at line " << __LINE__ << endl
    437         << "       Compiled on " << __DATE__
    438         << " at " << __TIME__ << endl
    439         << "       Word read was \"" << word
    440         << "\":  Length too short" << endl;
    441     word = "something longer than five chars";
    442     assert(word.size() > threshold);
    443 
    444     return 0;
    445 }

    这些东西一定是敲过一遍才觉得有趣,当然上边的东西也很初级,这基本上是前四章内重要的函数了,把它们弄在了一起,暂时先不整理了

  • 相关阅读:
    Element-ui前端自定义排序
    elementUI --- el-select 下拉框样式覆盖
    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数
    ORA-01476: divisor is equal to zero解决方法
    Linux下安装Mysql
    Fastdfs安装
    java基础
    Markdown学习
    Maven构建SpringMVC环境报错“java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe
    解决IDEA提示Untrusted Server's certificate 证书不可用( Server's certificate is not trusted )
  • 原文地址:https://www.cnblogs.com/Vcanccc/p/5666759.html
Copyright © 2011-2022 走看看