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→double←float,強制轉換:如 (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 }