C基礎(36——40)

wKiom1efdyfQ0969AAC0Kuc0oC4993.png

//兩個指針
#include <stdio.h>
#include <stdlib.h>

char* Reverse(char * s)
{
                 char* left=s ;
                 char* right=s ;

                 while(*right)
                                right++;
                right--;

                 while(right>left)
                {
                                 //swap—>創建臨時變量
                                 /*char tmp=*left;
                                *left=*right;
                                *right=tmp;*/

                                 //swap—>異或
                                *left=*left^*right;
                                *right=*left^*right;
                                *left=*left^*right;

                                left++;
                                right--;
                }

                 return s ;
}
void test()
{
                 char str[]="hello,world-coming!" ;  //注意此處不能用char* str="hello,world-coming!",因爲指針存於常量區,不能去改變它

                printf( "%s\n",Reverse(str));
}
int main()
{
                test();
                system( "pause");
                 return 0;
}


////遞歸
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//
//void Reverse(char* str,int left,int right)
//{
//             if(left>=right)
//                             return;
//
//             char tmp=str[left];
//             str[left]=str[right];
//             str[right]=tmp;
//
//             Reverse(str,left+1,right-1);
//}
//void test()
//{
//             char str[]="hello,world-coming!";
//             int len=strlen(str)-1;
//
//             Reverse(str,0,len);
//
//             printf("%s\n",str);
//}
//int main()
//{
//             test();
//             system("pause");
//             return 0;
//}


////數組
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//
//char* Reverse(char* str,int left,int right)
//{
//             while(left<right)
//             {
//                             char tmp=str[left];
//                             str[left]=str[right];
//                             str[right]=tmp;
//
//                             left++;
//                             right--;
//             }
//
//             return str;
//}
//void test()
//{
//             char str[]="hello,world-coming!";
//             int len=strlen(str);
//
//             printf("%s\n",Reverse(str,0,sizeof(str)/sizeof(str[0])-2));  //sizeof(str)/sizeof(str[0])是算上'\0'的
//}
//int main()
//{
//             test();
//             system("pause");
//             return 0;
//}

結果:

wKioL1efd2HQLT64AAAN37lFZyI465.png



wKioL1efd53ACZr9AAFwpYJl5rk343.png

#include <stdio.h>
#include <stdlib.h>

int SubStr(char dst[],char src[],int start,int len)
{
                 char* first=src +start;
                 char* end=src +start+len;
                 int i=0;

                 while(*first && first<end /*&& i<len*/ )
                {
                                 dst[i]=src [start+i];
                                first++;
                                i++;
                }

                 dst[i]='\0' ;  //切記

                 return i+1;  //包括'\0'
}

//變量較少的實現方法
//int SubStr(char dst[],char src[],int start,int len)
//{
//             int i=0;
//             
//             while(len-- && src[start]!='\0')
//                             dst[i++]=src[start++];
//
//             dst[i]='\0';
//
//             return i+1;
//}
void test()
{
                 char str[]="hello world" ;
                 char target[100];

                printf( "%d\n",SubStr(target,str,4,20));
                printf( "%s\n",target);
}
int main()
{
                test();
                system( "pause");
                 return 0;
}

結果:

wKiom1efd8DgcvRlAAAssCuuhNY292.png


wKioL1efd_HzzD6kAACv3vnaNBo792.png

#include <stdio.h>
#include <stdlib.h>

void test()
{
                 int c;
                 while((c=getchar())!='\n' )
                {
                                 if(c>='A' && c<='Z')
                                                c+=32;

                                putchar(c);
                }
                printf( "\n");
}
int main()
{
                test();
                system( "pause");
                 return 0;
}

結果:

wKioL1efeC7wA-bzAAAOnOWjpgo454.png


wKiom1efeEih9R0mAADBH5tVVBk498.png

wKioL1efeGfA4-laAAAmlCiEUx0860.png

#include <stdio.h>
#include <stdlib.h>

void test()
{
                 int c;
                 while((c=getchar())!=EOF )
                {
                                 if(c>='A' && c<='z')
                                                c= 'A'+'z' -c;

                                putchar(c);
                }
}
int main()
{
                test();
                system( "pause");
                 return 0;
}

結果:

wKioL1efeIbSIADnAAALzjNpaDE555.png


wKiom1efeKWRW2MaAACXUcnBJ7E853.png

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//把dst當成一個指針
//char* Strcpy(char* dst,const char* src)
//{
//             assert(src);
//             int i=0;
//
//             while(*src)
//             {
//                             dst[i++]=*src++;
//             }
//
//             dst[i]='\0';
//
//             return dst;
//}
//把dst當指針
char* Strcpy(char * dst,const char* src)
{
                assert(src);
                assert(dst);
                 char* d=dst;

                 while(*src)
                                *d++=*src++;

                *d= '\0';

                 return dst;
}
//庫函數的實現方法
//char* Strcpy(char* dst,const char* src)
//{
//             assert(src);
//             assert(dst);
//             char* d=dst;  //先保存住dst的首地址,讓d移動
//
//             while((*d++=*src++)!='\0')
//                             ;
//
//             return dst;
//}
void test()
{
                 char* str="hello world,change the WORLD" ;
                 char dest[100];

                printf( "%s\n",Strcpy(dest,str));
}
int main()
{
                test();
                system( "pause");
                 return 0;
}

結果:

wKioL1efeMjBl0nfAAAU6zUYYEo886.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章