C/C++语言复习(一)

1、每个函数被调用时都需要开辟空间存储数据,函数调用时开辟的空间称为栈空间。每个函数的栈空间大小,取决于函数中声明变量占用的空间。


 2、//冒泡排序法

      for (int i =0; i < 5 - 1; i++) {

         //i = 0

         //i = 1

         for (int j =0; j < 5 - 1 - i; j++) {

         //j = 0, 1, 2, 3

         //j = 0, 1, 2

            if (a[j] < a[j + 1]){

               int tmp = a[j];

               a[j]= a[j + 1];

               a[j+ 1] = tmp;

            }

         }

   }

      、3、指针就是用来访问当前栈外面的空间的。不能在声明时确定指向的指针,应当初始化为NULL。静态内存分配(编译时决定空间的大小;确定空间大小的是编译器;开辟的空间在栈段、数据段、只读数据段;自动释放);动态内存分配(程序运行时,确定空间大小;确定空间大小的是程序员;开辟的空间在堆段;通过代码手动释放)

            4、

【栈段】函数调用时生成的空间

 

【堆段】

【数据段】全局变量和静态变量

【只读数据段】字符串

【代码段】函数

       //函数名是函数入口地址,但不是栈地址,是代码段地址,代码段存函数体。而当cpu执行函数时需要开辟空间执行函数代码里的操作,比如开辟空间存数据(所以函数里的变量是在栈中,当然除了函数里的字符串,因为所有的字符串都单独存在只读数据段),这时开辟的空间就是栈地址,所以栈地址会随着程序执行完而销毁。

       5、<string.h>里的一些常用的函数:

1        <string.h>  

2      <string.h>  

复制  

4   

5 char* strcpy (char *s1, const char *s2);  

6 将字符串s2复制到s1指定的地址  

7   

8 char* strncpy (char *s1, const char *s2, size_t len);  

9 void*  memcpy (void *s1, const void *s2, size_t len);  

10     s2的前len个字符()复制到s1中指定的地址不加'/0'  

11        

12     void* memmove (void *s1, const void *s2, size_t len);  

13     当源元和目的冲区交迭使用  

14        

15     size_t strxfrm (char *s1, const char *s1, size_t len);  

16     根据程序当前的区域选项s2的前len个字符()复制到s1中指定的地址不加'/0'  

17        

18       

19        

20     char* strcat (char *s1, const char *s2);  

21     将字符串s2接到s1尾部  

22        

23     char* strncat (char *s1, const char *s2, size_t len);  

24     将字符串s2的前len个字符接到s1尾部不加'/0'  

25        

26       

27        

28     int strcmp (const char *s1, const char *s2);  

29     字符串s1s2  

30        

31     int strncmp (const char *s1, const char *s2, size_t len);  

32     int  memcmp (const void *s1, const void *s2, size_t len);  

33     s1s2的前len个字符()作比  

34        

35     int strcoll (const char *s1, const char *s2);  

36     根据程序当前的区域选项中的LC_COLLATE, 字符串s1s2  

37        

38       

39        

40     char* strchr (const char *s, int ch);  

41     void* memchr (const void *s, int ch, size_t len);  

42     s定字符(节值)ch第一次出的位置  

43        

44     char* strrchr (const char *s, int ch);  

45     在串s定字符ch最后一次出的位置, r表示从串尾开始  

46        

47     char* strstr (const char *s1, const char *s2);  

48     在串s1找指定字符串s2第一次出的位置  

49        

50     size_t strspn (const char *s1, const char *s2);  

51     返回s1中第一个在s2中不存在的字符的索引(find_first_not_of)  

52        

53     size_t strcspn (const char *s1, const char *s2);  

54     返回s1中第一个也在s2中存在的字符的索引(find_first_of)  

55        

56     char* strpbrk (const char *s1, const char *s2);  

57     strcspn是返回指而不是索引  

58        

59     char* strtok (char *s1, const char *s2);  

60     从串s1中分离出由串s2中指定的分界符分隔开的(token)  

61     第一次s1需分割的字串此后每次用都将s1NULL,  

62     每次strtok返回一个直到返回NULL  

63        

64     其他  

65        

66     size_t strlen (const char *s);  

67     求字符串s  

68        

69     void* memset (void *s, int val, size_t len);  

70     将从s开始的len个字val  

71        

72     char* strerror (int errno);  

返回指向错误信息字符串的指

73     strstr ( )/* -- C函数源代 - */    

74     /* 

75         得到s1中第一次包含s2字符串的位置指 

76     */  

77     #include <stdlib.h>  

78     char * my_strstr(const char *s1,const char *s2)  

79     {  

80         if (*s1 == 0)  

81          {  

82            if (*s2)  

83              return (char *) NULL;  

84            return (char *) s1;  

85          }  

86         while (*s1)  

87         {  

88            size_t i;  

89            i = 0;  

90            while (1)  

91            {  

92              if (s2[i] == 0)  

93              {  

94                 return (char *) s1;  

95              }  

96              if (s2[i] != s1[i])  

97              {  

98                 break;  

99              }  

100             i++;  

101           }  

102           s1++;  

103        }  

104        return (char *) NULL;  

105    }  

106    int main()  

107    {  

108        char *str1 = "ammana_babi";  

109        char *str2 = "babi";  

110        char *p;  

111        if( (p = my_strstr(str1,str2)) == NULL)  

112           printf("Can't find the string /"%s/"!/n",str2);  

113        else  

114           printf("Find the string /"%s/"!/n",p);  

115        str1 = "abc";  

116        str2 = "def";  

117        if( (p = my_strstr(str1,str2)) == NULL)  

118           printf("Can't find the string /"%s/"!/n",str2);  

119        else  

120           printf("Find the string /"%s/"!/n",p);  

121        system("pause");  

122        return 0;  

123    }   

124    strpbrk ( )/* -- C函数源代 - */    

125    /* 

126        得到s1中第一个且是s2中字符的位置指 

127    */  

128    #include <stdlib.h>  

129    char * my_strpbrk(const char *s1 ,const char *s2)  

130    {  

131        const char *c = s2;  

132        if (!*s1)  

133           return (char *) NULL;  

134        while (*s1)  

135        {  

136           for (c = s2; *c; c++)  

137           {  

138             if (*s1 == *c)  

139                break;  

140           }  

141           if (*c)  

142             break;  

143           s1++;  

144        }  

145        if (*c == '/0')  

146           s1 = NULL;  

147        return (char *) s1;  

148    }  

149    int main()  

150    {  

151        char *str1 = "ammana_babi";  

152        char *str2 = "babi";  

153        char *p;  

154        if( (p = my_strpbrk(str1,str2)) == NULL)  

155           printf("No same character!/n");  

156        else  

157           printf("%c/n",*p);  

158        str1 = "abc";  

159        str2 = "def";  

160        if( (p = my_strpbrk(str1,str2)) == NULL)  

161           printf("No same character!/n");  

162        else  

163           printf("%c/n",*p);  

164        system("pause");  

165        return 0;  

166    }   

167    strcspn ( )/* -- C函数源代 - */    

168    /* 

169        得到s1中第一个且是s2中字符的字符位置。 

170    */  

171    int my_strcspn(const char *s1 ,const char *s2)  

172    {  

173        const char *s = s1;  

174        const char *p;  

175        while (*s1)  

176        {  

177           for (p = s2; *p; p++)  

178           {  

179             if (*s1 == *p)  

180                break;  

181           }  

182           if (*p)  

183             break;  

184           s1++;  

185        }  

186        return s1 - s;  

187    }  

188    int main()  

189    {  

190    char *str1 = "ammana_babi";  

191        char *str2 = "babi";  

192        int offset;  

193        if((offset = my_strcspn(str1,str2)) >= strlen(str1))  

194           printf("Can't find the same character!/n");  

195        else  

196           printf("%c/n",*(str1 + offset));  

197        str1 = "abc";  

198        str2 = "def";  

199        if((offset = my_strcspn(str1,str2)) >= strlen(str1))  

200           printf("Can't find the same character!/n");  

201        else  

202           printf("%c/n",*(str1 + offset));  

203        system("pause");  

204        return 0;  

205    }  

206    strspn ( )/* -- C函数源代 - */    

207    /* 

208        得到s1中第一个且不是s2中任意字符的字符位置。 

209    */  

210    int my_strspn(const char *s1 ,const char *s2)  

211    {  

212        const char *s = s1;  

213        const char *p;  

214        while (*s1)  

215        {  

216           for (p = s2; *p; p++)  

217           {  

218             if (*s1 == *p)  

219                break;  

220           }  

221           if (*p == '/0')  

222             break;  

223           s1++;  

224        }  

225        return s1 - s;  

226    }  

227    int main()  

228    {  

229    char *str1 = "ammana_babi";  

230        char *str2 = "babi";  

231        int offset;  

232        if((offset = my_strspn(str1,str2)) >= strlen(str1))  

233           printf("Can't find the different character!/n");  

234        else  

235           printf("%c/n",*(str1 + offset));  

236        str1 = "abc";  

237        str2 = "abc";  

238        if((offset = my_strspn(str1,str2)) >= strlen(str1))  

239           printf("Can't find the different character!/n");  

240        else  

241           printf("%c/n",*(str1 + offset));  

242        system("pause");  

243        return 0;  

244    }  

245    strrev ( )/* -- C函数源代 - */    

246    /* 

247        Reverses the order of characters in the string. 

248        The terminating null character remains in place. 

249        把字符串的所有字符的来(不包括空字符NULL)。 

250        返回指向序后的字符串指 

251    */  

252    char * my_strrev(char *str)  

253    {  

254        char *right = str;  

255        char *left = str;  

256        char ch;  

257        while (*right)    right++;  

258        right--;  

259        while (left < right)  

260        {  

261            ch = *left;  

262             *left++ = *right;  

263             *right-- = ch;  

264        }  

265        return(str);  

266    }  

267    /* 

268        而我自己写的代就略微的有些啰嗦,不简洁 

269        更不是很太爽快。问题得好好想一下的了。 

270        下面就是我的垃圾代 

271    */  

272    char * my_StrReverse(char * ch)  

273    {  

274        char tempch,* tch;  

275        int Len,i;  

276        tch = ch;  

277        Len = strlen(ch);  

278        for(i=0;i<Len/2;i++)  

279        {  

280           tempch = *tch;  

281           *tch = *(tch + Len - 2*i - 1);  

282           *(tch+Len-2*i-1) = tempch;  

283           tch++;  

284        }  

285        return ch;  

286    }  

287    int main()  

288    {  

289        char str[] ="ammana_babi";  

290        puts(my_strrev(str));  

291        puts(my_StrReverse(str));  

292        system("pause");  

293        return 0;  

294    }   

295    strnset ( )/* -- C函数源代 - */    

296    /* 

297        Sets the first count characters of string the character value.If the length of string is less than count, the length of string is used in place of n. 

298        把字符串的前count个字符字符val 

299    */  

300    char * my_strnset(char * str,int val,int count)  

301    {  

302        char *p = str;  

303        while (count-- && *p)  

304           *p++ = (char)val;  

305        return(p);  

306    }  

307    int main()  

308    {  

309        char str[] ="ammana_babi";  

310        my_strnset(str,'*',strlen(str)-4);  

311        puts(str);  

312        system("pause");  

313        return 0;  

314    }  

315    strset ( )/* -- C函数源代 - */    

316    /* 

317        Sets all of characters in string (except the terminating '/0'character) equal to val. 

318        把字符串的所有字符都字符val 

319    */  

320    char * my_strset(char *str,int val)  

321    {  

322        char *p = str;  

323        while (*str)  

324           *str++ = (char)val;  

325        return(p);  

326    }  

327    int main()  

328    {  

329        char str[] ="ammana_babi";  

330        my_strset(str,'z');  

331        puts(str);  

332        system("pause");  

333        return 0;  

334    }  

335    strupr ( )/* -- C函数源代 - */    

336    /* 

337        Force string to lower case 

338        将字符串转换为大写。只改字符串中出的小写字母,不改其他字符。 

339    */  

340    char * my_strupr(char *str)  

341    {  

342        char *p = str;  

343        while (*p != '/0')  

344        {  

345           if(*p >= 'a' && *p <= 'z')  

346           *p -= 0x20;  

347           p++;  

348         }  

349        return str;  

350    }  

351    int main()  

352    {  

353        int i;  

354        char str1[]= "Ammana";  

355        char str2[] = "baBi";  

356        char str3[] = "AMMANA";  

357        char str4[] = "aMmAn_BabI";    

358        puts(my_strupr(str1));  

359        puts(my_strupr(str2));  

360        puts(my_strupr(str3));  

361        puts(my_strupr(str4));  

362        system("pause");  

363        return 0;  

364    }  

365    strlwr ( )/* -- C函数源代 - */    

366    /* 

367        Force string to lower case 

368        将字符串转换为小写。只改字符串中出的大写字母,不改其他字符。 

369    */  

370    char * my_strlwr(char *str)  

371    {  

372        char *p = str;  

373        while (*p != '/0')  

374        {  

375           if(*p >= 'A' && *p <= 'Z')  

376             *p = (*p) + 0x20;  

377           p++;  

378         }  

379       return str;  

380    }  

381    int main()  

382    {  

383        int i;  

384        char str1[]= "Ammana";  

385        char str2[] = "baBi";  

386        char str3[] = "AMMANA";  

387        char str4[] = "aMmAn_BabI";  

388        puts(my_strlwr(str1));  

389        puts(my_strlwr(str2));  

390        puts(my_strlwr(str3));  

391        puts(my_strlwr(str4));  

392        system("pause");  

393        return 0;  

394    }  

395    strdup ( )/* -- C函数源代 - */    

396    /* 

397        Allocates enough storage via malloc() for a copy of the string, copies the string into the new memory, and returns a pointer to it. 

398        复制字符串,返回指向被复制字符串的指。所需空malloc()分配,且可以由free()放。需要注意的是,在用完个函数后,一定要放内存空间吆 

399    */  

400    #include <stdlib.h>  

401    int my_strlen ( const char * str )  

402    {  

403        const char *p = str;  

404         while( *p++ ) ;  

405         return( (int)(p - str - 1) );  

406    }  

407    char * my_strcpy(char * dst, const char * src)  

408    {  

409        char * cp = dst;  

410        while( *cp++ = *src++ )   ;           

411        return( dst );  

412    }  

413    char * my_strdup(const char *str)  

414    {  

415        char *p;  

416        if (!str)  

417           return(NULL);  

418        if (p = malloc(my_strlen(str) + 1))  

419           return(my_strcpy(p,str));  

420        return(NULL);  

421    }  

422    int main()  

423    {  

424        char *str = "ammana_babi";  

425        char *p;  

426        p = my_strdup("ammana_babi");  

427        puts(p);  

428        free(p);  

429        system("pause");  

430        return 0;  

431    }  

432    strrchr ( )/* -- C函数源代 - */    

433    /* 

434        Finds the last occurrence of ch in string.   The terminating null character is used as part of the search. 

435        找在字符串中最后一次出字符’ch’的位置。如果str中存在字符ch,返回出ch的位置的指;否返回NULL 

436    */  

437    #include <stdlib.h>  

438    char * my_strrchr(const char * str,int ch)  

439    {  

440        char *p = (char *)str;  

441        while (*str) str++;  

442        while (str-- != p && *str != (char)ch);  

443        if (*str == (char)ch)   

444             return( (char *)str );  

445        return(NULL);  

446    }  

447    int main()  

448    {  

449        char *str = "ammana_babi";  

450        char * p;  

451        char ch;  

452         

453        ch = '9';  

454        p = (char *)my_strrchr(str,ch);  

455        if(p == NULL)  

456           printf("Can't find the character %c !/n",ch);  

457        else  

458           printf("Find the character %c !/n",*p);  

459         

460        ch = 'b';  

461        p = (char *)my_strrchr(str,ch);  

462        if(p == NULL)  

463           printf("Can't find the character %c !/n",ch);  

464        else  

465           printf("Find the character %c !/n",*p);  

466        system("pause");  

467        return 0;  

468    }  

469    strchr ( )/* -- C函数源代 - */    

470    #include <stdlib.h>  

471    /* 

472        Searches a string for a given character, which may be the null character '/0'.  

473        找字符串string中首次出字符ch的位置。如果string中存在字符ch,返回首次出ch的位置的指;否返回NULL 

474    */  

475    char * my_strchr(const char *str, int ch)  

476    {  

477        while (*str && *str != (char)ch)  

478             str++;  

479        if (*str == (char)ch)  

480             return((char *)str);  

481        return(NULL);  

482    }  

483    int main()  

484    {  

485        char *str = "ammana_babi";  

486        char * p;  

487        char ch;  

488         

489        ch = '9';  

490        p = (char *)my_strchr(str,ch);  

491        if(p == NULL)  

492           printf("Can't find the character %c !/n",ch);  

493        else  

494           printf("Find the character %c !/n",*p);  

495         

496        ch = 'b';  

497        p = (char *)my_strchr(str,ch);  

498        if(p == NULL)  

499           printf("Can't find the character %c !/n",ch);  

500        else  

501           printf("Find the character %c !/n",*p);  

502        system("pause");  

503        return 0;  

504    }  

505    memset ( )/* -- C函数源代 - */    

506    /* 

507        Sets the first "count" bytes of the memory starting at "dst" to the character value "val". 

508        dst所指内存区域的前count个字节设val。返回指向dst的指 

509        实际应用中,我候会用malloc函数来申一些内存空个内存空候需要初始化,常用memset行初始化。 

510        如: 

511        int *p; 

512        p = (int *)malloc( 0x400 * sizeof(int)); 

513        memset(p,0,0x400); 

514    */  

515    void * my_memset(void *dst,int val,int count)  

516    {  

517        void *p = dst;  

518        while (count--)   

519        {  

520           *(char *)dst = (char)val;  

521             dst = (char *)dst + 1;  

522        }  

523        return p;  

524    }  

525    int main()  

526    {  

527        char str[] ="ammana_babi";  

528        my_memset(str,'z',strlen(str));  

529        puts(str);  

530        system("pause");  

531        return 0;  

532    }  

533    memicmp ( )/* -- C函数源代 - */    

534    /* 

535    memicmp perform a case-insensitive memory comparision. 

536    For differences,upper case letters are mapped to lower case.Thus, "abc_" < "ABCD" since "_" < "d". 

537        (memcmp就是在比候不区分大小写)内存区域buffer1buffer2的前count个字。当buffer1 < buffer2,返回 < 0;当buffer1 = buffer2,返回 0;当buffer1 > buffer2,返回 > 0 

538    */  

539    int my_tolower(char ch)  

540    {  

541        if(ch >= 'A' && ch <= 'Z')  

542           return (ch + 0x20);  

543        return ch;  

544    }  

545    int my_memicmp(const void *buffer1,const void *buffer2,int count)  

546    {  

547         int f = 0;  

548         int l = 0;  

549         while (count--)  

550         {  

551             if ( (*(unsigned char *)buffer1 == *(unsigned char *)buffer2) ||  

552                     ((f = my_tolower( *(unsigned char *)buffer1 )) ==  

553                     (l =   my_tolower( *(unsigned char *)buffer2 ))) )  

554             {  

555             buffer1 = (char *)buffer1 + 1;  

556             buffer2 = (char *)buffer2 + 1;  

557             }  

558             else  

559                 break;  

560         }  

561         return ( f - l );  

562    }  

563    void Print(char * str1,char *str2,int t)  

564    {  

565        if(t > 0)  

566           printf("/n%s Upper Than %s/n",str1,str2);  

567        else if(t < 0)  

568           printf("/n%s Lower Than %s/n",str1,str2);  

569        else  

570           printf("/n%s Equal %s/n",str1,str2);  

571            

572    }  

573    int main()  

574    {  

575        char *str1= "ammana";  

576        char *str2 = "babi";  

577        char *str3 = "AMMANA";  

578        char *str4 = "bab_";  

579        Print(str1,str2,my_memicmp(str1,str2,4));  

580        Print(str3,str1,my_memicmp(str3,str1,4));  

581        Print(str4,str2,my_memicmp(str4,str2,4));  

582         

583        system("pause");  

584        return 0;  

}    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值