Day 24, Linux知识点走起~
1
编程题
【剑指Offer】不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路: 首先我们知道两个数相加,
(迭代版)
class Solution {
public:
int Add(int num1, int num2)
{
while(num2 != ){
int tmp = num1 ^ num2;
num2 = (num1 & num2) << ;
num1 = tmp;
}
return num1;
}
};
(递归版,只需要一句话,简化了上面的代码)
class Solution {
public:
int Add(int num1, int num2)
{
return num2 != ? Add(num1^num2, (num1&num2) << ) : num1;
}
};
【剑指Offer】字符串转换成整数
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。
输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0
思路: 假如一个数1234,我们可以通过循环遍历每个数字,然后通过res=res*10+str[i]-'0',这是得到整数的核心代码,但是由于这个数还存在不合法的数字,因此再次之前要先进行判断,由于字符串可能出现符号'+','-'等,也要进行判断,注意判断后我们将符号位设置为'0',这么做为了在不影响结果的情况下,编程变得更加方便!
class Solution {
public:
int StrToInt(string str) {
int len = str.length();
if(len <= || str[] == ) return ;
int symbol = , res = ; // 什么都不加默认为正数
if(str[] == '+'){
symbol = ;
str[] = '0';
}else if(str[] == '-'){
symbol = -1;
str[] = '0';
}
for(int i = ;i < str.length();i++){
if(str[i] < '0' || str[i] > '9'){
res = ;
break;
}
res = res * + str[i] - '0';
}
return symbol * res;
}
};
2
概念题
【Liunx】wc命令详解,以及功能示例
wc全称为"Word Count", 利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
命令格式:wc [-clw][--help][--version][文件…]
例如:grep "for" proc.c | wc -l 表示proc.c的for循环一种有多少个,非常实用的功能!
【Linux】Linux中read()是系统调用的么?
系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api. read()函数不是库函数,为系统调用,Linux常用的系统函数为open/close/read/write/fntl
【Linux】Linux中文件属性
文件分为文件内容和数据,在Linux中分成两个部分:用户数据(user data)与元数据(metadata),其中:
在 Linux 中,元数据中的 inode 号(inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
上图就表示两个文件为硬链接的情况,两个文件共用同一个inode节点,相当于对一组数据起不同的文件名,每增加一个文件名,inode节点链接数增加一,反之,删除一个链接数减一,直到为零,内存被系统回收!这叫做硬链接,那么软连接呢?我们后面再说哟!!!