您的位置:首页 > 编程语言 > C语言/C++

来自菜鸟的日程-------c语言基础篇8(大小端,回文,字符串逆转,左旋,第一个只出现一次的字母)

2018-11-17 00:59 127 查看

//大小端

//bool IsBig()
//{
//	short sh=0x1234;
//	char *p=(char *)&sh;
//	if (*p==0x34)
//	{
//		return false;
//	}
//	return true;
//}

//字符串逆转(倒装句)

void Reverse(char *pbegin,char *pend)
{
assert(pbegin != NULL && pend != NULL);
char tmp = 0;
while(pbegin  <  pend)
{
tmp = *pbegin;
*pbegin = *pend;
*pend = tmp;
pbegin++;
pend--;
}
}

char *ReverseSentence(char *str)//"jkdsjfkjf  fdsfjs  dslfj "
{
assert(str != NULL);
char*  pbegin   = str;
char *pend = str;
while(*pend != '\0')//"abcdef\0"       "fedcba\0"
{
pend++;
}
pend--;

Reverse(pbegin,pend);//""
pbegin = str;
pend = str;
while(*pbegin != '\0')
{
if(*pbegin == ' ')
{
pbegin++;
pend++;
}
else if(*pend == ' ' || *pend == '\0')
{
Reverse(pbegin,--pend);
pbegin = ++pend;
}
else
{
pend++;
}
}
return str;
}

int main()
{
char str[]="Here is Tulun";
ReverseSentence(str);
printf("%s",str);
return 0;
}

//回文字符串

//bool pal(const char *str)
//{
// assert(*str!=null);
// const char *start=str;
// const char *end=str+strlen(str)-1;
// while(start<end)
// {
//	 if(*start==*end)
//	 {
//		 start++;
//		 end--;
//	 }
//	 else
//	 {
//		  return false;
//	 }
// }
// return str;
//}

/*二分法查找

int Binarserach(int *arr,int key,int len)
{
int low =0;
int high=len-1;
while(low<=high)
{
//int mid=(low+high)/2;
int mid=(low+high)>>1;
if(arr[mid]==key)
{
return mid;
}
else if(mid<key)
{
low=mid+1;
}
else if(mid>key)
{
high=mid-1;
}
}
return -1;
}
int main()
{
int arr[]={1,2,3,4,5,6};
int len=sizeof(arr)/sizeof(arr[0]);
int key=4;
Binarserach(arr,key,len);
return 0;
}

*/

第一个只出现一次的字符

char firstNotRepeate(char* str)
{
assert(str != NULL);
const int SIZE = 256;
int hashTable[SIZE] = {};
char *phash = str;
while(*phash != '\0')
{
hashTable[*(phash++)]++;
/*hashTable[*phash]++;
phash++;*/
}
phash = str;
while(*phash != '\0')
{
if(hashTable[*phash] == 1)
{
return *phash;
}
phash++;
}
return '\0';
}
int main()
{
char *str = "abcabdcad";
char ch = firstNotRepeate(str);
printf("%c\n",ch);
return 0;
}

左旋数组

void Reverse(char *begin,char *end)
{
char tmp;
while(begin < end)
{
tmp = *begin;
*begin = *end;
*end = tmp;
begin++;
end--;
}
}
char *Left_Arry(char *str,int num)
{
assert(str != NULL && num > 0);
int len = strlen(str);
if(len > 0 && num < len)
{
char *firstbegin = str;
char *firstend = firstbegin+num-1;
char *secondbegin = firstend+1;
char *secondend = str+len-1;
Reverse(firstbegin,firstend);
Reverse(secondbegin,secondend);
Reverse(firstbegin,secondend);
}
return str;
}
int main()
{
char str[] = "abcdef";
printf("%s\n",Left_Arry(str,2));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐