int main()
{
unsigned long pulArray[] = { 6,7,8,9,10 };
unsigned long* pulPtr;
pulPtr = pulArray;
*(pulPtr + 3) += 3;
printf("%d,%d", *pulPtr, *(pulPtr + 3));
return 0;
}
最后结果是6,12
字符串逆序 :
写一个函数,可以逆序字符串内容
#include<string.h>
#include<assert.h>
void reverse(char* str)
{
assert(str);//保证sttr是指针
int len = strlen(str);
char* left = str;
char* right = str + len - 1;
while(left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[256] = { 0 };
scanf("%s", arr);//a b c d e f ----> f e d c b a
//gets(arr);
//逆序函数
reverse(arr);
printf("%s\n", arr);
}
assert函数的作用是判断指针不为空指针,条件成立往下执行,不成立显示报错
scanf函数读取字符串时遇到空格是不会读取的,所以输入的字符串hello world,只会对hello进行逆序。
想要有空格的换一个函数,用gets函数(读取一行)可以读取空格
运行结果
题目:
实现一个函数,可以左旋字符串中的k个字符
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符串得到CDAB
法一:
#include<string.h>
void left_move(char *arr, int k)
{
int i = 0;
int len = strlen(arr);
for (i = 0; i < k; i++)
{
//左旋转一个字符
//1.把最左边的元素先拿出去
char tmp = *arr;
//2.其他的元素向左挪
int j = 0;
for (j = 0; j <len-1 ; j++)
{
*(arr + j) = *(arr + j + 1);
}
//3.把移出去的拿回来
*(arr + len - 1) = tmp;
}
}
int main()
{
char arr[] = "abcdef";
left_move(arr, 2);
printf("%s\n", arr);
return 0;
}
法二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//三步翻转法
//前k个字符先翻转
//例如 k=2
//a b c d e f
//b a c d e f
//再把剩下的四个字符翻转
//b a f e d c
//最后全部翻转
//c d e f a b
//有了这样的思路,我们开始写代码
#include<assert.h>
#include<string.h>
void reverse(char* left, char* right)
{
assert(left != NULL);
assert(right != NULL);
while (left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char* arr, int k)
{
assert(arr);
int len = strlen(arr);
reverse(arr,arr+k-1);//逆序左边
reverse(arr+k,arr+len-1);//逆序右边
reverse(arr,arr+len-1);//逆序整体
}
int main()
{
char arr[] = "abcdef";
left_move(arr, 2);
printf("%s\n", arr);
}
题目:
写一个函数,判断一个字符串是否为另一个字符串旋转之后的字符串
例如:是旋转得来的,返回1,不是,返回0.
给定s1=AABCD s2=BCDAA, 返回1;
给定s1=abcd, s2=ACBD,返回0;
#include<assert.h>
#include<string.h>
void reverse(char* left, char* right)
{
assert(left != NULL);
assert(right != NULL);
while (left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char* arr, int k)
{
assert(arr);
int len = strlen(arr);
assert(k<=len);
reverse(arr,arr+k-1);//逆序左边
reverse(arr+k,arr+len-1);//逆序右边
reverse(arr,arr+len-1);//逆序整体
}
int is_left_move(char* s1, char* s2)
{
int len = strlen(s1);
int i = 0;
for (i = 0; i < len; i++)
{
left_move(s1, 1);
int ret = strcmp(s1, s2);
if (ret == 0)
return 1;
}
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[]= "cdefab";
int ret=is_left_move(arr1, arr2);
if (ret == 1)
{
printf("Yes");
}
else
{
printf("No");
}
}