第一天的學習

string類的成員函數c_str()ios

c_str()函數原型:const char *c_str(void)c++

c_str()函數功能: 當程序用到atoi()、strcpy()這類的C函數時要求參數爲char*型,就要將string類字符串轉換成char型字符串;(string是個類,char是個常規類型)算法

c_str()函數實現:編程

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //定義一個簡易的string類,實現將傳進來的任意類型的字符串 儲存到 char*指針指向的空間裏
 5 class my_string
 6 {
 7 public:
 8     my_string(const char* str = nullptr)
 9     {
10         if(nullptr == str)        //寫判斷語句時常量要寫在前面,以減小出錯(萬一少些一個 '=' 系統會報錯)
11         {
12             data = nullptr;
13         }
14         else
15         {
16             data = new char[strlen(str)+1];    //+1 是由於有 '\0'
17             strcpy(data,str);            //只能strcpy(char* dest,const char* src)這一種參數形式
18         }
19     }
20     const char* c_str(void)
21     {
22         return data;
23     }
24 private:
25     char* data;   // 用於儲存 char* 字符串 26 };
27 int main(void)
28 {
29     my_string s("hello world!");
30     cout << s.c_str() << endl;
31     return EXIT_SUCCESS;
32 }

 

上式代碼中有提到的strcpy,windows

strcpy()函數原型char* strcpy(char *dest, const char *src)數組

strcpy()函數功能:複製兩個char型字符串,並且他們能夠是空,但不能夠指向一個地址否則達不到想要的效果(memcpy能夠複製兩個指向一個地址空間的變量/類/結構體)網絡

strcpy()函數實現函數

1 char *my_strcpy(char *dest, const char *src)
2 {
3     char *ret = dest;
4     while(( *(dest++) = *(src++) ) != '\0');
5     return ret;
6 }

 

memcpy()函數原型:void *memcpy(void *dest,const void *src,size_t size)網站

memcpy()函數功能:從源src指向的內存地址的起始位置開始 拷貝size個字節到 目標dest所指的內存地址的起始位置中ui

memcpy()函數實現:

 1 void *my_memcpy(void *dest, const void *src,size_t size)
 2 {
 3     assert(nullptr != dest && nullptr != src);//有些時候只能用 (#define打開調試/#undef關閉調試) #ifdef ...#endif來選擇 不一樣於頭文件中的#ifndef..#define..#endif
 4     void *ret = dest;
 5     if(dest <= src || (char*)dest >= (char*)src + size)//源地址不低於目標地址或不重疊,正常拷貝
 6         while(size--)
 7         {
 8             *(char*)dest == *(char*)src;
 9             dest = (char*)dest + 1;
10             src = (char*)src + 1;
11         }
12     else                            //源地址低於目標地址,高字節向低字節拷貝
13     {
14         dest = (char*)dest + size - 1;
15         src = (char*)src + size - 1;
16         while(size--)
17         {
18             *(char*)dest == *(char*)src;
19             dest = (char*)dest - 1;
20             src = (char*)src - 1;
21         }
22     }
23     return ret;
24 }

 

atoi()函數原型:int atoi(const char *nptr)

atoi()函數功能:char型 字符串數字轉化成整形數字,將傳進來的字符串數*nptr逐個轉化成數字,首先從一個非空白符的數字或者正負號開始,一旦開始遇到非數字結束。

atoi()函數實現:

 1 int my_atoi(const char *nptr)
 2 {
 3     int integer_sign = 1;
 4     int ret_integer = 0;
 5     assert(nptr);
 6 
 7     while(isspace((int)*nptr) != 0) //跳過開頭的空格符。while(isspace((int)*nptr) != 0)等價於while(isspace(*nptr) != 0) 調用時char型會自動轉化成int型
 8     {
 9         cout << (int)*nptr << endl;
10         ++nptr;
11     }
12 
13     if(*nptr == '-')    //儲存符號
14         integer_sign = -1;
15     
16     if(*nptr == '+' || *nptr == '-')    //跳過多餘的符號
17         ++nptr;
18 
19     while(*nptr >= '0' && *nptr <= '9') //開始轉化,只接納數字的轉換
20     {
21         ret_integer = ret_integer*10 + *nptr - '0'; 22         ++nptr;
23     }
24 
25     ret_integer = integer_sign*ret_integer;
26 
27     return ret_integer;
28 }

 

上文中提到的isspace函數

isspace函數原型:int isspcae(int _C)

isspace函數功能:檢查參數c是否爲空格字符,也就是判斷是否爲空格(' ')、水平定位字符('\t')00九、歸位鍵('\r')01三、換行('\n')0十、垂直定位字符('\v')011或翻頁('\f')012的狀況。若爲空格符返回TRUE(!=0),不然NULL(=0)

isspace函數實現:

1 int my_isspace(int _C)
2 {
3     return (unsigned int)(_C - 9)<5u || _C == ' ';//\t水平製表(HT)009 \n換行(LF) 010 \v垂直製表(VT)011 由於\f換頁(FF)012  \r回車(CR)013
4 }

同理還有一個isprint函數

isprint()函數原型:extern int isprint(char c)

isprint()函數功能: 判斷字符c是否爲可打印字符(含空格),當c爲可打印字符(0x20-0x7e)時,返回非零值,不然返回零。

isprint()函數實現:

 1 #include <iostream>]
 2 int my_isprint(char _C);
 3 int main()
 4 {
 5     int c;
 6     //clrscr(); // clear screen
 7     c='a';
 8     printf("%c:%s\n",c,my_isprint(c)?"yes":"no");
 9     c=' ';
10     printf("%c:%s\n",c,my_isprint(c)?"yes":"no");
11     c=0x7f;
12     printf("%c:%s\n",c,my_isprint(c)?"yes":"no");
13     getchar();
14     return 0;
15 }    
16 
17 int my_isprint(char _C) 
18  
19 { 
20     return (unsigned int)(_C - ' ') < 127u - ' '; //判斷字符c是否爲可打印字符(含空格)。當c爲可打印字符(0x20-0x7e)時,返回非零值,不然返回零。
21 }

 有待完善的string 函數~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

黑馬基礎班第一天的課程

  

各類進制的表示形式 = 十進制的計算方法以及表現形式
1234(十進制) = 1*10^3 + 2*10^2 + 3*10^1 + 4*10^0(=1234)
2322(八進制) = 2*8^3 + 3*8^2 + 2*8^1 + 2*8^0(=1234)
4D2(十六進制) = 4*16^2 + 13*16^1+ 2*8^0(=1234)
10011010010(二進制) = 1*2^10 + 0*2^9 + 0*2^8 + 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0(=1234)

各進制之間的轉換:

  1 //進制之間的轉換(純C編程)。讀者可使用C++的string和stack編寫會更加快捷
  2 //由於stack 先進後出的功能和適合該編程。
  3 //stack的基本操做
  4 //1.入棧:如s.push(x);
  5 //2.出棧:如 s.pop().注意:出棧操做只是刪除棧頂的元素,並不返回該元素。
  6 //3.訪問棧頂:如s.top();
  7 //4.判斷棧空:如s.empty().當棧空時返回true。
  8 //5.訪問棧中的元素個數,如s.size();
  9 #include <iostream>
 10 #include <math.h>
 11 
 12 using namespace std;
 13 
 14 void TenTooAll();        //十進制    →    2、8、十六進制
 15 void TwoTooTen();        //二進制    →    十進制
 16 void EightTooTen();        //八進制    →    十進制
 17 void SixtteenTooTen();    //十六進制    →    十進制
 18 
 19 int main()
 20 {
 21     while(1)
 22     {
 23         cout << "您即將輸入的是幾進制數:(若是您要退出前按數字0,謝謝!)" << endl;
 24         int quit = 1;
 25         int choice;
 26         cin >> choice;
 27         switch(choice)            //選擇要輸入的進制
 28         {
 29         case 0:quit = 0;break;
 30         case 10:TenTooAll();break;
 31         case 2:TwoTooTen();break;
 32         case 8:EightTooTen();break;
 33         case 16:SixtteenTooTen();break;
 34         default:cout << "您的輸入不是已有進制" << endl;break;
 35         }
 36         if(0 == quit)
 37             break;
 38     }
 39     
 40     return 0;
 41 }
 42 
 43 void TenTooAll()    //十進制 → 2、8、十六進制
 44 {
 45     cout << "請你輸入一個整形數:" << endl;
 46     int number;
 47     cin >> number;
 48     cout << "您要轉換成的進制是:" << endl;    //選擇要轉換的進制
 49     int system;
 50     cin >> system;
 51     if(number == 0)
 52     {
 53         cout << "十進制數:" << number << "轉換成" << system << "進制數是:" << number <<endl;
 54     }
 55     else
 56     {
 57         cout << "十進制數:" << number << "轉換成" << system << "進制數是:";
 58         int i=0;
 59         int a[100];
 60         char b[100];
 61         memset(a,0,100*sizeof(int)); // 通常狀況不清零是無法用的
 62         memset(a,0,100*sizeof(char));
 63 
 64         //輸出爲16進制時————————————————
 65         if(system == 16)
 66         {
 67             for(; number > 0; ++i)
 68             {
 69                 int single;
 70                 single = number % system; // 求餘
 71                 if(single > 9)
 72                 {
 73                     single = single -10+65-48;//由於single是int型 因此變成ASCII碼值要變回int型
 74                 }
 75                 else
 76                 {
 77                     single = single + 48 -48;//便於閱讀
 78                 }
 79 
 80                 b[i] = single +48; // 將int型轉換成char型
 81                 number = number / system;
 82             }
 83 
 84             //倒序輸出————————-——————
 85             for(int j = i-1; j >= 0; --j)
 86             {
 87                 if(b[j] > '9')
 88                 {
 89                     cout << b[j]; //輸出字母
 90                 }
 91                 else
 92                 {
 93                     cout << b[j]-48; //輸出數字
 94                 }
 95 
 96             }
 97         }
 98 
 99         //輸出爲2、八進制時————————
100         else
101         {
102             for(; number > 0; ++i)
103             {
104                 int single;
105                 single = number % system; 
106                 number = number / system; 
107                 a[i] = single;
108             }
109             for(int j = i-1; j >= 0; --j)  
110             {
111                 cout << a[j];
112             }
113         }
114         cout << endl;
115     }
116 
117 }
118 
119 
120 
121 void TwoTooTen()
122 {
123     cout << "請你輸入一個整形數:" << endl;
124     char enter;//用於接收回車鍵
125     char number[100];
126     enter = cin.get();
127     cin.getline(number,100,'\n');//輸入遇到回車鍵 就結束
128     if(number-48 == 0)
129     {
130         cout << "二進制數:" << number << "轉換成十進制數是:" << number <<endl;
131     }
132     else
133     {
134         cout << "二進制數:" << number << "轉換成十進制數是:";
135         int i=0;
136         int total = 0;
137         for(; i < strlen(number); i++)
138         {
139             
140             total = total + (number[strlen(number)-1-i] - '0') * pow(2,i); //此處要-1由於字符串有保存'\0' 且 數組下標從0開始
141 
142         }
143         cout << total << endl;
144     }
145 }
146 
147 void EightTooTen()
148 {
149     cout << "請你輸入一個整形數:" << endl;
150     char enter;//用於接收回車鍵
151     char number[100];
152     enter = cin.get();
153     cin.getline(number,100,'\n');
154     if(number-48 == 0)
155     {
156         cout << "二進制數:" << number << "轉換成十進制數是:" << number <<endl;
157     }
158     else
159     {
160         cout << "二進制數:" << number << "轉換成十進制數是:";
161         int i=0;
162         int total = 0;
163         for(; i < strlen(number); i++)
164         {
165             
166             total = total + (number[strlen(number)-1-i] - '0') * pow(8,i); 
167 
168         }
169         cout << total << endl;
170     }
171 }
172 
173 
174 void SixtteenTooTen()
175 {
176     cout << "請你輸入一個整形數:" << endl;
177     char enter;//用於接收回車鍵
178     char number[100];
179     enter = cin.get();
180     cin.getline(number,100,'\n');
181     if(number-48 == 0)
182     {
183         cout << "二進制數:" << number << "轉換成十進制數是:" << number <<endl;
184     }
185     else
186     {
187         cout << "二進制數:" << number << "轉換成十進制數是:";
188         int i=0;
189         int total = 0;
190         for(; i < strlen(number); i++)
191         {
192             if(number[strlen(number)-1-i] >= 'A')//
193                 total = total + (number[strlen(number)-1-i] - 7 - '0') * pow(16,i); //將字母轉化成相應的數字
194             else
195                 total = total + (number[strlen(number)-1-i] - '0') * pow(16,i); 
196         }
197         cout << total << endl;
198     }
199 }

 c語言的32個關鍵字:

c語言的34種運算符:

c語言的9種控制語句:

經常使用CMD-DOS指令:

 

用vs打開記事本、網站等操做:

 1 #include <stdlib.h>
 2 
 3 void main()
 4 {
 5     system("notepad");
 6     //system("start notepad");//並行 進程
 7     system("taskkill /f /im notepad.exe");//關閉程序
 8     system("calc");
 9     system("ipconfig"); 
10     system("tasklist");
11     system("netstat -a");
12     system("D:\\Users\\Administrator\\AppData\\Roaming\\360se6\\Application\\360se.exe  www.qq.com");//若是目錄有空格 就加"\"  \""字符
13     system("pause");
14 }

 

 

黑馬基礎班次日的課程

 

 用不一樣的方法輸出 h

 1 //#include <windows.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 
 5 
 6 void main()
 7 {
 8     char str[50] = "hello world!";
 9     printf("%x",&str);
10     putchar(10);
11     //MessageBoxA(0,"朱碧雲在玩遊戲,因此網絡故障!","網絡斷開",2);
12     //ShellExecuteA(0,"open","c:\\",0,0,1);//比system強大
13     //system("c:\\");
14     //前面三個0是系統+默認,後面1是正常打開,若是是0 就是隱藏打開 3最大化 6最小化
15 
16     //while(1)
17     //{
18     //    malloc(10000000);
19     //    Sleep(1000);//休眠1000毫秒=1秒
20     //}
21 
22     printf("h");
23     printf("%s","h");
24     printf("%c",'h');
25     putchar('h');
26     printf("\n");
27     putchar(104);//10進制
28     putchar(0150);//8進制
29     putchar('\150');//8進制
30     putchar(0x68);//16進制
31     putchar('\x68');//16進制
32     putchar(1101000);
33     putchar('\n');
34     
35     //char str[50] = "hello world!";//在C語言裏,變量只能在函數的開頭處聲明和定義
36     putchar(10);
37     printf("hello world!");
38     putchar(10);
39     sprintf(str,"%s","hello world!");
40     printf(str);
41     putchar(10);
42     sprintf(str,"%c%c%c%c%c",'h','e','l','l','o');
43     printf(str);
44     getchar();
45 }

 

 

黑馬基礎班第三天的課程

 

SHRT_MAX;//#include <limits.h> #define SHRT_MAX      32767 

 

變量a與b兌換數據:

 1 void temp(int &a,int&b)
 2 {
 3     int a = 100, b = 10;
 4     
 5     //方法一:
 6     int temp;
 7     temp = a;
 8     a = b;
 9     b = a;
10 
11     //方法二:
12     a = a + b;
13     b = a - b;
14     a = a - b;
15 
16     //方法三:
17     a = a * b;
18     b = a / b;
19     a = a / b;
20 }

 

 

 

 

 

 1 //設置隨機數
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <time.h>
 5 
 6 void main()
 7 {
 8     int num;
 9     time_t time1;
10     srand((unsigned)time(&time1));
11     num = rand() % 100; //(0到100)
12     num > 50 ? system("mspaint"):system("tasklist");
13 
14     getchar();
15 }
 1 //設置極大值(極小值)
 2 #include <limits.h>
 3 #include <float.h>
 4 
 5 void main()
 6 {
 7     SHRT_MAX;
 8     INT_MAX;
 9     UINT_MAX;
10     FLT_MAX;
11     DBL_MAX;
12 }

 


sizeof('a') = 4;  //C語言爲了空間的拓展,字符常量設置爲4個字節

 

 1 //sprintf的用法
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 
 5 void main()
 6 {
 7     char str1[10] = "ged";
 8     char str2[10] = "i";
 9     char str3[10];
10     sprintf(str3,"%s%s%c",str1,str2,'t');
11     printf("%s",str3);
12 
13     getchar();
14 }

 

數據類型的隱式轉換:short→int→unsigned→long→doublefloat,強制轉換:如 (int)x;

 

二進制的輸入函數:int str[30]; _itoa(num,str,8);//將數據num用8進制保存在str數組中;

 

偷錢:將123.345 小數點後第三位五舍六入,而後將小數點後第二位四捨五入。

算法:123.345*100→12334.5+0.4→(int)(12334.9)→12334/10→1233.4+0.5→(int)(1233.9)→1233/10

即:x = 123.345;

y = (int(  ( ((int)(x*100f+04f))/10f ) +0.5f  ) )/10f;

 

 

黑馬基礎班第七天的課程

字符常量:

 

算法的流程圖:

函數的遞歸調用:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

函數調用規則:調用函數沒有執行完成以前,不會執行下一步,沒有執行完的語句塊會進制壓棧,執行到最後會返回執行。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int Febc(int n);
 5 void change(int n);
 6 void main()
 7 {
 8     printf("%u",Febc(44));//會調用不少次,想當耗內存
 9     change(10);
10     getchar();
11 
12 }
13 
14 int Febc(int n) 
15 {
16     if(1 == n)
17     {
18 
19         return 1;//函數調用結束出口
20     }
21     else if(2 == n)
22     {
23         return 2;
24     }
25     else
26     {
27         return (Febc(n-1)+Febc(n-2));
28     }
29 }
30 
31 void change(int n)
32 {
33     if(1 == n)
34     {
35         printf("%d", n);//進行壓棧
36     }
37     else
38     {
39         change(n / 2);        
40         printf("%d", n % 2);//進行壓棧,而且逆序輸出餘。
41     }
42 }

 

相關文章
相關標籤/搜索