char函数

第79题:单词搜索

六眼飞鱼酱① 提交于 2019-12-02 02:10:54
一. 问题描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCCED", 返回 true. 给定 word = "SEE", 返回 true. 给定 word = "ABCB", 返回 false. 二. 解题思路 解题思路:本题采用回溯算法进行求解,递归函数(已经存储的字符串haveword,已经存储的最后一位的定位横坐标X,纵坐标y,标记后的整个数组board,目标值word) 步骤一:判断当前数值是否等于目标。是:返回true,不是,继续递归。 步骤二:对进行存储的数值要进行标记为1,防止重复使用。 三. 执行结果 执行用时 :47 ms, 在所有 java 提交中击败了9.38%的用户 内存消耗 :39.2 MB, 在所有 java 提交中击败了95.96%的用户 四. Java代码 class Solution { public boolean exist(char[][] board, String word) { for(int i=0;i

WriteUp-i春秋-溯源

不打扰是莪最后的温柔 提交于 2019-12-01 22:45:01
一个简单的逆向qwq 叫你输入key,给出提示信息 -- 无壳 C++编写 老规矩:拖IDA 搜索fail找到了main函数 这个main流程有点复杂qwq 我们看看它的伪代码: 全代码: 1 _DWORD *__fastcall sub_401D90(_DWORD *a1, _DWORD *a2) 2 { 3 _DWORD *v2; // esi 4 _DWORD *v3; // ebx 5 int v4; // eax 6 signed int v5; // edi 7 int v6; // ecx 8 int v7; // eax 9 void (__thiscall ***v8)(_DWORD, signed int); // eax 10 bool v9; // cf 11 _BYTE *v10; // eax 12 int v11; // ecx 13 int v12; // eax 14 unsigned int v13; // edi 15 int i; // eax 16 char v15; // dl 17 unsigned int v16; // edi 18 _DWORD *v17; // eax 19 _DWORD *v18; // eax 20 int v19; // eax 21 bool v20; // zf 22 int v21; // eax

SQL语句——05、类型转换函数

烂漫一生 提交于 2019-12-01 20:35:48
类型转换概述 在赋值语句中数据类型会隐式转换,隐式转换应当尽量避免,因为写出来的SQL难理解,随着时间流逝自己都很难理解。特别是嵌入到大型程序中时,另外,oracle升级会修改隐式转换的规则,这会使程序移植遇到问题。 尤其是索引列不能使用隐式转换,这样就不走索引 。 赋值语句中oracle的自动转换规则: 将变长字符型(varchar2)或定长字符型(char)转换成数值型(number) 将变长字符型(varchar2)或定长字符型(char)转换成日期型(date) 将数值型(number)转换成变长字符型(varchar2) 将日期型(date)转换成变长字符型(varchar2) 表达式中oracle的自动转换规则: 将变长字符型(varchar2)或定长字符型(char)转换成数值型(number) 将变长字符型(varchar2)或定长字符型(char)转换成日期型(date) 转换成功的条件: 在将字符型数据转换成数字型时,要保证字符型数据为有效的数。 在将字符型数据转换成日期型时,要保证字符型数据位有效的日期。 ----拿字符和数字比较 oracle自动将字符串转成了数字 SQL> select ename,sal from emp where sal > '4000'; ENAME SAL ---------- ---------- KING 5000 ---

《驱动调试 - printk源码分析和应用实例》

醉酒当歌 提交于 2019-12-01 19:10:12
1.在驱动调试中,使用printk(),是最简单,最方便的办法 当uboot的命令行里的“ console=tty1 ”时,表示printk()输出在开发板的LCD屏上 当uboot的命令行里的“ console=ttySAC0,115200 ”时,表示printk()输出在串口UART0上,波特率=115200 当uboot的命令行里的“ console=tty1 console=ttySAC0,115200 ”时,表示printk()同时输出在串口上,以及开发板的LCD屏上 显然printk(),还是根据命令行参数来调用不同控制台的硬件处理函数 内核又是怎么根据上面命令行参数来确定printk()的输出设备? 2.我们以“console=ttySAC0,115200”为例,进入linux-2.6.22.6\kernel\printk.c 找到以下一段: __setup("console=", console_setup); 若uboot传递进来的命令行字符串里含有“ console= ”,便调用 console_setup() 函数,并对“console=”后面带的字符串" ttySAC0,115200 "进行分析 3. 我们以*str= "ttySAC0,115200" 为例,console_setup() 函数如下所示 static int __init console

StringUtils 常用方法

余生长醉 提交于 2019-12-01 18:27:06
判空函数 1)StringUtils.isEmpty(String str) 2)StringUtils.isNotEmpty(String str) 3)StringUtils.isBlank(String str) 4)StringUtils.isNotBlank(String str) 5)StringUtils.isAnyBlank(CharSequence... css) 6)StringUtils.isAnyEmpty(CharSequence... css) 7)StringUtils.isNoneBlank(CharSequence... css) 8)StringUtils.isNoneEmpty(CharSequence... css) 9)StringUtils.isWhitespace(CharSequence cs) isNotEmpty = !isEmpty, isBlank同理; 容易忽略的; StringUtils.isEmpty("") = true isBlank和isEmpty区别: System.out.println(StringUtils.isBlank(" "));//true System.out.println(StringUtils.isBlank(" "));//true System.out.println

strlen和sizeof

只愿长相守 提交于 2019-12-01 17:36:51
sizeof是在编译的时候就将结果计算出来了是类型所占空间的字节数,所以以数组名做参数时计算的是整个数组的大小。而strlen是在运行的时候才开始计算结果,这是计算的结果不再是类型所占内存的大小,数组名就退化为指针了。 strlen(): 函数 strlen是寻找从指定地址开始,到出现的第一个0之间的字符个数 sizeof()运算符 sizeof https://blog.csdn.net/weixin_41042404/article/details/86719441 在本文中有很多是从 https://blog.csdn.net/weixin_41042404/article/details/86719441 搬运的,感谢该文的作者,大家转载别忘了附上该文链接。 以下是一个C程序,注释是对应的知识介绍 #include<stdio.h> #include<string> #include <stdlib.h> typedef long TLONG; int f1() { return 0; }; double f2() { return 0.0; } void f3() {} union u1//定义联合 { double a; int b; }; union u2 { char a[13]; int b; }; union u3 { char a[13]; char b; }

C零基础视频-40-结构体指针

落爺英雄遲暮 提交于 2019-12-01 17:23:33
目录 结构体指针的定义 使用结构体指针引用结构体成员 结构体指针作为函数参数传递 结构体指针的定义 结构体指针的定义与基本数据结构的指针类似,使用"*"符号即可: #include <stdio.h> struct tagPetDog{ char szName[20]; char szColor[20]; char nWeight; }; int main(int argc, char* argv[]) { tagPetDog dog = { "旺财", "黄色", 5 }; tagPetDog* pDog = &dog; return 0; } 使用结构体指针引用结构体成员 结构体指针也支持取内容,加减常数等操作,同基本数据结构的指针类似,在此不再赘述。 结构体指针通过"->"运算符,可以引用结构体成员: #include <stdio.h> struct tagPetDog{ char szName[20]; char szColor[20]; char nWeight; }; int main(int argc, char* argv[]) { tagPetDog dog = { "旺财", "黄色", 5 }; tagPetDog* pDog = &dog; printf("%s 颜色:%s, 体重:%d公斤\r\n", pDog->szName, pDog-

LDD3阅读笔记-字符设备驱动

久未见 提交于 2019-12-01 17:22:34
#主要开发流程介绍 module_init宏和module_exit宏 当模块装载时需要调用module_init宏指定的函数,卸载时需要调用 module_exit宏指定的函数 以下是简单的init流程: 初始化设备 初始化file_operation 获取字符设备号 注册字符设备 当卸载模块时,需要释放申请的设备号。 #主设备号和次设备号 对字符设备的访问是通过文件系统内的设备名称进行的。那些名称被称为特殊 文件、设备文件,或者简单称为文件系统树的节点,他们通常位于/dev目录。 通常而言,主设备号表示设备对应的驱动程序。例如,/dev/null和/dev/zero 由驱动程序1管理,而虚拟控制台和串口终端由驱动程序4管理。 现代的Linux内核允许多个驱动程序共享主设备号,但我们看到的仍然按照”一 个主设备号对应一个驱动程序“的原则组织。 /proc/devices 可以查看注册的主设备号; /proc/modules 可以查看正在使用模块的进程数 #设备编号的内部表达 在内核中dev_t类型(在linux/types.h中定义)用来保存设备编号——包括主 设备号和次设备号。我们的代码不应该对设备编号的组织做任何假定,而应该始终 使用linux/kdev_t.h中定义的宏。 MAJOR(dev_t dev); MINOR(dev_t dev); 相反

C零基础视频-28-C标准库中常见的字符串操作函数

♀尐吖头ヾ 提交于 2019-12-01 17:21:15
目录 字符串的特殊性 字符串比较 获取字符串长度 复制字符串 连接字符串 字符串的特殊性 字符串不是基本数据类型。因此,像操作基本数据类型那样操作,可能会失败: #include <stdio.h> int main(int argc, char* argv[]) { char* szHello = "Hello"; char chAry[] = "Hello"; printf("%s, %s\r\n", szHello, chAry); if (szHello == chAry) { printf("两者相等\r\n"); } else { printf("两者不相等\r\n"); } return 0; } 以上显示不相等,是因为字符串不是基本数据类型,直接比较szHello与chAry,其实是在比较地址 #include <stdio.h> int main(int argc, char* argv[]) { char* szHello = "Hello"; char chAry[] = "Hello"; printf("%s, %s\r\n", szHello, chAry); printf("%08X, %08X\r\n", szHello, chAry); return 0; } 思考下,编程角度如何去比较两个字符串是否相等呢? 为了便利,C库函数提供了一系列函数

c语言描述-串的基本操作

时光总嘲笑我的痴心妄想 提交于 2019-12-01 17:20:49
串的定长顺序存储(部分代码) 连接两个串: 串的第一个空间存储串长 #define MIXSIZE 100 typedef int Status; typedef char SString[MIXSIZE+1]; Status Concat(SString *s3,SString s1,SString s2) { if(s1[0]+s2[0]<=MIXSIZE) { printf("fgsd\n"); for(int i=1;i<=s1[0];i++) { *s3[i]=s1[i]; } for(int i=s1[0]+1;i<s1[0]+s2[0];i++) { *s3[i]=s2[0]; } *s3[0]=s1[0]+s2[0]; return TRUE; } else if(s1[0]<MIXSIZE&&(s1[0]+s2[0]>MIXSIZE)) { printf("fgsd\n"); for(int i=1;i<=s1[0];i++) { *s3[i]=s1[i]; } for(int i=s1[0]+1,j=1;(void)(i<=MIXSIZE),j<=MIXSIZE-s1[0];j++,i++) { *s3[i]=s2[j]; } *s3[0]=MIXSIZE; return FALSE; } else { for(int i=1;i<=MIXSIZE;i++) {