#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#include<ctype.h>
void bit_set(unsigned char* p_data, unsigned char pos, int flag)
{
assert(p_data != NULL);
assert((pos >= 1) && (pos <= 8));
if (flag == 1)
{
*p_data |= (1 << (pos - 1));
}
else if (flag == 0)
{
*p_data &= ~(1 << (pos - 1));
}
}
int main()
{
unsigned char num = 0;
bit_set(&num, 4, 1);
printf("%d\n", num);
bit_set(&num, 4, 0);
printf("%d\n", num);
return 0;
}
{
assert(p_data != NULL);
assert((pos >= 1) && (pos <= 8));
if (flag == 1)
{
*p_data |= (1 << (pos - 1));
}
else if (flag == 0)
{
*p_data &= ~(1 << (pos - 1));
}
}
int main()
{
unsigned char num = 0;
bit_set(&num, 4, 1);
printf("%d\n", num);
bit_set(&num, 4, 0);
printf("%d\n", num);
return 0;
}
方法一
void RightLoopMove(char* pStr, unsigned short steps)
{
int i = 0;
int j = 0;
int len = 0;
char tmp = 0;
assert(pStr != NULL);
len = strlen(pStr);
for (j = 0; j < steps; j++)
{
tmp = *(pStr + len - 1);
for (i = 0; i < len - 1; i++)
{
*(pStr + len - 1 - i) = *(pStr + len - 2 - i);
}
*pStr = tmp;
}
}
void RightLoopMove(char* pStr, unsigned short steps)
{
int i = 0;
int j = 0;
int len = 0;
char tmp = 0;
assert(pStr != NULL);
len = strlen(pStr);
for (j = 0; j < steps; j++)
{
tmp = *(pStr + len - 1);
for (i = 0; i < len - 1; i++)
{
*(pStr + len - 1 - i) = *(pStr + len - 2 - i);
}
*pStr = tmp;
}
}
int main()
{
char arr[] = "abcdefghi";
//RightLoopMove(arr, 2);
//printf("%s\n", arr);
RightLoopMove(arr, 4);
printf("%s\n", arr);
return 0;
}
方法二
void RightLoopMove(char* pStr, unsigned short steps)
{
int i = 0;
int j = 0;
int len = 0;
char tmp = 0;
char* cur = NULL;
assert(pStr != NULL);
len = strlen(pStr);
for (j = 0; j < steps; j++)
{
cur = pStr + len - 2;
tmp = *(pStr + len - 1);
for (i = 0; i < len - 1; i++)
{
*(cur + 1) = *cur;
cur--;
}
*pStr = tmp;
}
}
{
char arr[] = "abcdefghi";
//RightLoopMove(arr, 2);
//printf("%s\n", arr);
RightLoopMove(arr, 4);
printf("%s\n", arr);
return 0;
}
方法二
void RightLoopMove(char* pStr, unsigned short steps)
{
int i = 0;
int j = 0;
int len = 0;
char tmp = 0;
char* cur = NULL;
assert(pStr != NULL);
len = strlen(pStr);
for (j = 0; j < steps; j++)
{
cur = pStr + len - 2;
tmp = *(pStr + len - 1);
for (i = 0; i < len - 1; i++)
{
*(cur + 1) = *cur;
cur--;
}
*pStr = tmp;
}
}
int main()
{
char arr[] = "abcdefghi";
//RightLoopMove(arr, 2);
//printf("%s\n", arr);
RightLoopMove(arr, 4);
printf("%s\n", arr);
return 0;
}
{
char arr[] = "abcdefghi";
//RightLoopMove(arr, 2);
//printf("%s\n", arr);
RightLoopMove(arr, 4);
printf("%s\n", arr);
return 0;
}
方法三
void reserve(char* left, char* right)
{
assert(left);
assert(right);
while (left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void RightLoopMove(char* pStr, unsigned short steps)
{
int len = strlen(pStr);
reserve(pStr, pStr + len - steps - 1);
reserve(pStr + len - steps, pStr + len - 1);
reserve(pStr, pStr + len - 1);
}
void reserve(char* left, char* right)
{
assert(left);
assert(right);
while (left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void RightLoopMove(char* pStr, unsigned short steps)
{
int len = strlen(pStr);
reserve(pStr, pStr + len - steps - 1);
reserve(pStr + len - steps, pStr + len - 1);
reserve(pStr, pStr + len - 1);
}
int main()
{
char arr[] = "abcdefghi";
RightLoopMove(arr, 2);
printf("%s\n", arr);
return 0;
}
{
char arr[] = "abcdefghi";
RightLoopMove(arr, 2);
printf("%s\n", arr);
return 0;
}
int my_atoi(const char*str)
{
assert(str != NULL);
int ret = 0;
int flag = 1;
for (; *str == ' ' || *str == '/t'; str++)
{
if (*str == '-')
{
flag = -1;
}
if (*str == '-' || *str == '+')
{
str++;
}
while (isdigit(*str))
{
ret = ret * 10 + (*str - '0')*flag;
if (ret > INT_MAX || ret < INT_MIN)
{
if (flag == 1)
{
return INT_MAX;
}
else
{
return INT_MIN;
}
}
}
return flag*ret;
}
}
int main()
{
char* p = "12345";
int num = my_atoi(p);
printf("%d\n", num);
return 0;
}
{
assert(str != NULL);
int ret = 0;
int flag = 1;
for (; *str == ' ' || *str == '/t'; str++)
{
if (*str == '-')
{
flag = -1;
}
if (*str == '-' || *str == '+')
{
str++;
}
while (isdigit(*str))
{
ret = ret * 10 + (*str - '0')*flag;
if (ret > INT_MAX || ret < INT_MIN)
{
if (flag == 1)
{
return INT_MAX;
}
else
{
return INT_MIN;
}
}
}
return flag*ret;
}
}
int main()
{
char* p = "12345";
int num = my_atoi(p);
printf("%d\n", num);
return 0;
}