#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>
//
//int my_strlen(const char * str)
//{
// int count = 0;
// assert(str != NULL);
// while (*(str++) != '\0')
// {
// count++;
// }
// return count;
//}
//size_t - unsigned int 无符号整型
//size_t my_strlen(const char * str)
//{
// size_t count = 0;
// assert(str != NULL);
// while (*(str++) != '\0')
// {
// count++;
// }
// return count;
//}
//
//int main()
//{
// char arr[20] = { "dsjflddsljk" };
// int num = my_strlen(arr);
// //int len = strlen(arr);
// printf("%d\n",num);
// return 0;
//}
//__cdecl --函数调用约定
//操作符练习作业:
//int main()
//{
// int a, b, c;
// a = 5;
// c = ++a;
// b = ++c, c++, ++a, a++;
// b += a++ + c;
// printf("a= %d,b= %d,c= %d", a, b, c); 9 23 8
// return 0;
//}
//练习3、求两个数二进制中不同位的个数
//编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位bit不同?输入例子:1999 2299
//int main()
//{
// int a = 22;
// int b = 33;
// int i = a^b;
// int count = 0;
// while (i)
// {
// if (i & 1==1)
// {
// count++;
// }
// i = i >> 1;
// }
// printf("%d\n", count);
// return 0;
//}
//练习4、获取n的二进制中的奇数位和偶数位
//int main()
//{
// int n = 0;
// scanf("%d", &n);
// for (int i = 31; i >=0 ; i -= 2)
// {
// printf("%2d %2d", (n >> i) & 1, (n >> i - 1) & 1);
// }
//
// return 0;
//}
//练习5、交换两个整数变量,不允许创建临时变量
//int main()
//{
// int a = 10;
// int b = 20;
// a = a ^ b;
// b = a ^ b;
// a = a ^ b;
// printf("a=%d b=%d", a, b);
// return 0;
//}
// 3 5 ^a ^b
//011 101 110 011 101
//001
//101
//110
//011
//001
//000
//十进制:1
//二进制:00000000 00000000 00000000 00000001
//十六进制:00 00 00 01
//int main()
//{
// int arr[] = { 1, 2, 3, 4, 5 };
// short *p = (short*)arr;
// int i = 0;
// for (i = 0; i < 4; i++)
// {
// *(p + i) = 0;
// }
// for (i = 0; i < 5; i++)
// {
// printf("%d", arr[i]);
// }
// return 0;
//}
//练习:
//int cnt = 0;
//int fib(int n)
//{
// cnt++;
// if (n == 0)
// return 1;
// else if (n == 1)
// return 2;
// else
// return fib(n - 1) + fib(n - 2);
//}
//void main()
//{
// fib(8);
// printf("%d", cnt); //67
//}
//练习:
//int main()
//{
// int x = 1;
// do{
// printf("%2d\n", x++);
// } while (x--);
// return 0;//死循环
//}
//考试题:倒置字符串--例 i like you 倒置成you like i
//方法一(瞎想):
//void invert(char *a, int l)
//{
// char newarr[100] = { 0 };
// int n = l-1;
// int count = 0;
// for (int i = l; i>=0; i--)
// {
// newarr[i] = a[i];//字符串整体翻转存到新数组
// //printf("%c", a[i]);
// if (a[i] == ' ')
// {
// for (int j = 0; j <=n; j++)//单词逆转
// {
// if (newarr[j] != '\0')
// {
// printf("%c", newarr[j+1]);//打印字符串
// count++;
// }
// }
// n = l - count;
// }
// if (i == 0)
// {
// printf("%c", newarr[i]);//打印字符串
// }
// }
// printf("\n");
//}
//
//int main()
//{
// char arr[100] = {"i love china!"};
// /*gets(arr);
// */
// int len = strlen(arr);
// //printf("%d", len);
// invert(arr,len);
// return 0;
//}
//方法二(老师参考):
void invert(char* left,char * right)
{
while (left < right)
{
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[100] = {"i love china"};
//gets(arr);
int len = strlen(arr);
invert(arr, arr + len - 1);//翻转字符串
//printf("%s", arr);
char *start = arr;
while (*start)
{
char* end = start;
while (*end != ' '&& *end != '\0')
{
end++;
}
invert(start, end-1);
if (*end == ' ')
{
start = end + 1;
}
else
start = end;
}
printf("%s\n", arr);
return 0;
}
//考试题2:求两个正整数的最小公倍数 能被A和B同时整除的最小正整数
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d %d", &a,&b);
// int temp = a > b ? a : b;
//
// for (int i = temp; i > 0; i++)
// {
// if ((i % a == 0) && (i % b == 0))
// {
// printf("两数的最小公倍数为:%d\n", i);
// break;
// }
// }
// return 0;
//}