首页 > 其他分享 >指针作业

指针作业

时间:2023-03-29 14:05:01浏览次数:27  
标签:arr right int 作业 ret char 指针 left

#include<stdio.h>

#include<string.h>

#include<assert.h>

#include<math.h>

void reverse(char* str) { assert(str);//断言 int len = strlen(str);//这里是字符串

char* left = str;

char* right = str + len - 1;

while (left<right)
{
	char tmp = *left;
	*left = *right;
	*right = tmp;
	left++;
	right--;
}

}

void print(int arr[], int sz)

{

int i = 0;

for (i = 0; i < sz; i++)

{

printf("%d ", arr[i]);

}

printf("/n");

}

void move(int arr[], int sz)

{

int left = 0; int right = sz - 1;

while (left < right)

{

while ((left < right) && (arr[left] % 2 == 1))

{

left++;

}

while ((left < right) && (arr[right] % 2 == 0))

{

right--;

}

if (left < right)

{

int tmp = arr[left];

arr[left] = arr[right];

arr[right] = tmp;

}

}

}

//1.暴力求解法 void left_move(char*arr, int k) { assert(arr);//断言避免是一个空指针 int i = 0; int len = strlen(arr); for (i = 0; i < k; i++) { char tmp = *arr; int j = 0; for (j = 0; j < len - 1; j++) { *(arr + j) = *(arr + j + 1); } *(arr + len - 1) = tmp; } }

void left_move1(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_move1(s1, 1); int ret = strcmp(s1, s2); if (ret == 0) return 1; } return 0; }

int is_left_move1(char* s1, char* s2) { int len1 = strlen(s1);

int len2 = strlen(s2);

if (len1 != len2) return 0; //1.在str1字符串后面追加一个str1字符串 //2.判断str2指向的字符串是否是str1指向字符串的字串 //strcat自己给自己追加容易死循环,/0被修改 strncat(s1, s1, 6);//要追加几个就是几个 char* ret = strstr(s1, s2); if (ret == NULL) { return 0; } else { return 1; } }

int Findnum(int arr[3][3], int k, int row, int col) { int x = 0; int y = col - 1; while (x <= row - 1 && y >= 0) { if (arr[x][y] > k) { y--; } else if (arr[x][y] < k) { x++; } else { return 1; } } return 0; }

int main() { //unsigned long pularrptr[] = {6,7,8,9,10}; //unsigned long *pulptr;

//pulptr = pularrptr;
//*(pulptr + 3) += 3;
//printf("%d,%d\n", *pulptr, *(pulptr + 3));


//char arr[256] = {0};
////scanf("%s", arr);//有空格就停止
//gets(arr);//读取一行,空格也不影响
//reverse(arr);
//printf("逆序后的字符串%s\n", arr);

//int a = 0;
//int n = 0;
//scanf("%d%d", &a, &n);
//int sum = 0;
//int i = 0;
//int ret = 0;
//for (i = 0; i < n; i++)
//{
//	ret = ret * 10 + 2;
//	sum += ret;
//}
//printf("%d\n", sum);

//int i = 0;
//for (i = 0; i <= 100000;i++)
//{
//	//判断是否为水仙花数
//	//1:计算i的位数n
//	int n = 1;
//	int tmp = i;
//	int sum = 0;
//	while (tmp /= 10)
//	{
//		n++;
//	}

//	//2:计算i的每一位的n次方之和
//	tmp = i;
//	while (tmp)
//	{
//		sum += pow(tmp % 10, n);
//		tmp /= 10;//tmp最后取到0
//	}
//	//3:比较i==sum
//	if (i == sum)
//	{
//		printf("%d ", i);
//	}
//}

//int line = 0;
//scanf("%d", &line);
////打印上半部分
//int i = 0;
//for (i = 0; i < line; i++)
//{
//	int j = 0;
//	for (j = 0; j < line - 1 - i; j++)
//	{
//		printf(" ");
//	}
//	for (j = 0; j < 2 * i + 1; j++)
//	{
//		printf("*");
//	}
//	printf("\n");
//}

////打印下半部分
//for (i = 0; i < line; i++)
//{
//	int j = 0;
//	for (j = 0; j <=i; j++)
//	{
//		printf(" ");
//	}
//	for (j = 0; j < 2 *(line-1-i)-1; j++)
//	{
//		printf("*");
//	}
//	printf("\n");
//}

//int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//int sz = sizeof(arr) / sizeof(arr[0]);
//move(arr, sz);
//print(arr,sz);

//char arr[] = "abcdef";
//left_move(arr, 2);
//printf("%s\n", arr);

//char arr1[] = "abcdef";
//char arr2[] = "cdefab";
//int ret = is_left_move(arr1, arr2);
//if (ret == 1)
//	printf("yes\n");
//else
//	printf("No\n");

//char arr1[30] = "abcdef"; //char arr2[] = "cdefab"; //int ret = is_left_move1(arr1, arr2); //if (ret == 1) //{ // printf("yes\n"); //} //else //{ // printf("No\n"); //}

//杨氏矩阵求解 //int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} }; //int k = 7; //int ret = Findnum(arr, k, 3, 3); //if (ret == 1) //{ // printf("找到了\n"); //} //else //{ // printf("找不到\n"); //}

return 0;

}

标签:arr,right,int,作业,ret,char,指针,left
From: https://blog.51cto.com/u_15891124/6156888

相关文章

  • 删除链表的第N个节点|栈、双指针
    删除链表的倒数第N个节点类似于删除链表中的第N个节点,但是这里是倒数第N个且不知道链表的长度,如果用删除第N个节点的方法去解决问题的时候需要先知道链表的长度。这就需......
  • 环形链表|哈希、快慢指针
    环形链表判断一个链表中是否有环,如果有返回环的起始位置。难点有两个,一是判断是否有环,二是找到起始点。这里有两种方法,一种是哈希集,另一种是快慢指针。对应题目142.环......
  • 力扣-数组-双指针
        1classSolution(object):2defremoveElement(self,nums,val):3"""4:typenums:List[int]5:typeval:int......
  • 指针
    1、指针:用来存放地址的,地址是唯一标识一块地址空间的2.1、意义:指针的类型决定了指针进行解引用操作时,访问空间的大小     int*---访问4个字节     char*-......
  • C++黑马程序员——P56-62. 指针
    P56.指针——指针的定义和使用P57.指针——指针所占内存空间P58.指针——空指针P59.指针——野指针P60.指针——const修饰指针P61.指针——指针和数组P62.指......
  • C++智能指针、绑定器和函数对象、lambda表达式
    智能指针​ 智能指针可以保证资源的自动释放不带引用计数的智能指针auto_ptr只让最后一个指向的指针管理资源,之前的auto_ptr会被置为nullptrscoped_ptr删除了拷贝构造......
  • C-指针
    指针每一个变量都有一个内存位置,每一个内存位置都定义了可使用&运算符访问的地址,它表示了在内存中的一个地址.指针也就是内存地址,指针变量是用来存放内存地址的......
  • C语言指针的理解
    //demo1.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<stdio.h>inti;voidch(int*a,int*b){ intp; ......
  • 引用和指针的区别
    1、定义和性质不同1、指针是一个变量,存储的地址,指向内存单元2、引用是变量的别名,跟原始变量是同一块内存inta=10;int*p=&a;//p是指针,&在此是取地址运算in......
  • 函数指针
    函数指针的几种用法#include<iostream>#include<vector>usingnamespacestd;voidadd(inta,intb){cout<<a+b<<"";}voidForEach(constvector<int>&n......