• 第一天的学习


    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 是因为有 ''
    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++) ) != '');
    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是否为空格字符,也就是判断是否为空格(' ')、水平定位字符(' ')009、归位键(' ')013、换行(' ')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 == ' ';//	水平制表(HT)009 
    换行(LF) 010 v垂直制表(VT)011 因为f换页(FF)012  
    回车(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
    ",c,my_isprint(c)?"yes":"no");
     9     c=' ';
    10     printf("%c:%s
    ",c,my_isprint(c)?"yes":"no");
    11     c=0x7f;
    12     printf("%c:%s
    ",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,'
    ');//输入遇到回车键 就结束
    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开始
    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,'
    ');
    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,'
    ');
    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("
    ");
    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('
    ');
    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 }

     

  • 相关阅读:
    网友谈:Dictionary.ContainsKey和List.BinarySearch哪个效率高
    C# WinForm 中在窗口标题栏上加按钮
    将Txt文件转换成dataset[原创]
    四个常见的排序算法[原创]
    改版后的groupbox[原创]
    转 五种提高 SQL 性能的方法
    转 牢记!SQL Server数据库开发的二十一条军规(SQL收藏)
    源码详解Java的反射机制
    java多线程采集+线程同步
    jQgrid API
  • 原文地址:https://www.cnblogs.com/zenseven/p/4192583.html
Copyright © 2020-2023  润新知