//大小端
//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;
}