1.字符串左旋结果
题目内容:写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例:给定s1 = AABCD和s2 = BCDAA,返回1
给定s1 = abcd和s2 = ACBD,返回0
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#include <stdio.h>
#include <string.h>
int is_string_left_rotate(char* str1, char* str2)
{
int i = 0;
int len = strlen(str1);
for (i = 0; i < len; i++)
{
char tmp = *str1;
int j = 0;
for (j = 0; j < len - 1; j++)
{
*(str1 + j) = *(str1 + j + 1);
}
*(str1 + len - 1) = tmp;
if (strcmp(str1, str2) == 0)
{
return 1;
}
}
return 0;
}
int main()
{
char arr1[10] = "AABCD";
char arr2[10] = "BCDAA";
int ret = is_string_left_rotate(arr1,arr2);
if (ret == 1)
{
printf("YES\n");
}
else
printf("NO\n");
return 0;
}
2.offsetof宏的实现
写一个宏,计算结构体中变量相对于首地址的偏移
#include <stdio.h>
#define OFFSETOF(struct_name,mem_name) (int)&(((struct_name*)0)->mem_name)
struct A
{
int a;
short b;
int c;
char d;
};
int main()
{
printf("%d\n", OFFSETOF(struct A, a));
printf("%d\n", OFFSETOF(struct A, b));
printf("%d\n", OFFSETOF(struct A, c));
printf("%d\n", OFFSETOF(struct A, d));
return 0;
}
3.模拟实现atoi
#include <stdio.h>
#include <limits.h>
#include <ctype.h>
enum State
{
INVALID,
VALID
};
enum State state = INVALID;
int my_atoi(const char* p)
{
int flag = 1;
if (p == NULL)
{
return 0;
}
if (*p == '\0')
{
return 0;
}
while (isspace(*p))
{
p++;
}
if (*p == '+')
{
flag = 1;
p++;
}
else if (*p == '-')
{
flag = -1;
p++;
}
long long n = 0;
while (isdigit(*p))
{
n = n * 10 + flag * (*p - '0');
if (n < INT_MIN || n>INT_MAX)
{
return 0;
}
p++;
}
if (*p == '\0')
{
state = VALID;
return (int)n;
}
else
{
return (int)n;
}
}
int main()
{
const char* p = " -14a";
int ret = my_atoi(p);
if(state == VALID)
printf("合法:%d\n", ret);
else
printf("非法:%d\n", ret);
return 0;
}
4.n的k次方
编写一个函数实现n的k次方,使用递归实现。
#include <stdio.h>
double Pow(int n, int k);
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
double ret = Pow(n, k);
printf("%lf\n", ret);
return 0;
}
double Pow(int n, int k)
{
if (k == 0)
return 1;
else if (k > 0)
return n * Pow(n, k - 1);
else
return 1.0 / (Pow(n, -k));
}
5.字符串逆序
编写一个函数reverse_string(char *string)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:char arr[] = “abcdef”
逆序之后数组的内容变成:fedcba
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » C语言经典例题-19
发表评论 取消回复