第一天的学习

string类的成员函数c_str()

c_str()函数原型:const char *c_str(void)

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,

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所指的内存地址的起始位置中

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')009、归位键('\r')013、换行('\n')010、垂直定位字符('\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();        //十进制    →    二、八、十六进制
 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()    //十进制 → 二、八、十六进制
 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         //输出为二、八进制时————————
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 }

 

posted @ 2014-12-29 22:52  击进的Cocos  阅读(458)  评论(0编辑  收藏  举报