char

Linux C字符串替换函数

余生颓废 提交于 2020-02-29 19:35:03
#include <stdio.h> #include <string.h> #include <stdlib.h> /** * * @author: cnscn@163.com * @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221 * * 用新子串newstr替换源字符串src中的前len个字符内所包含的oldstr子串 * * @param char* dest 目标串,也就是替换后的新串 * @param const char* src 源字符串,被替换的字符串 * @param const char* oldstr 旧的子串,将被替换的子串 * @param const char* newstr 新的子串 * @param int len 将要被替换的前len个字符 * * @return char* dest 返回新串的地址 * */ char *strreplace(char *dest, char *src, const char *oldstr, const char *newstr, size_t len) { //如果串相等,则直接返回 if(strcmp(oldstr, newstr)==0) return src; //子串位置指针 char

补码一位乘法(Booth算法,C语言实现)

喜欢而已 提交于 2020-02-29 19:32:34
补码一位乘法 首先了解下什么是补码?   补码概念的理解,需要先从“模”的概念开始。 我们可以把模理解为一个容器的容量。当超出这个 容量时,会自动溢出。如:我们最常见到的时钟,其容量 是 12,过了 12 点之后,就会变为 1 点, 2 点……也就是 说,超过12的部分将被丢弃。那么,在这个例子当中,时钟 的模就是12。模的概念可以帮助我们理解补码的含义。   补码的引出:假设现在时钟的时针指向 4 点的位 置,要使其指向 3 点,可以怎么操作呢?很明显,共有 2 种方法,顺时针拨 11 格(+11),或逆时针拨 1 格(-1)。 (为了区分顺时针和逆时针,我们用正数表示顺时针方 向转动的距离,负数表示逆时针方向转动的距离) 从上面的例子,不难发现,+11 和-1 实现了同样的 作用。主要原因是时钟的模是 12,顺时针旋转代表加法 运算:4+11=15,而达到模的部分会自动溢出,即 15-12= 3,即到达 3 点的位置。逆时针旋转代表减法运算:4-1= 3。在这个例子当中,+11和-1 是完全等价的。也就是说, 负数-1 可以用正数+11 代替,这样就可以把减法运算改 为加法运算。也可以说:+11 就是-1 的补码(模为 12 的 情况下)。 具体 的补码一位乘法(B ooth算法)    Booth算法简介    Booth算法也就是补码1位乘的比较法。被乘数为[X]补,乘数为

oracle to_char()函数--数字型到字符型

元气小坏坏 提交于 2020-02-29 17:29:50
数字型到字符型转换是可以自动转换的,当需要前置0时,需要用到to_char()函数 select to_char(8,'00') from dual ; --结果为' 08',注意有个代表正负号位置的空格 select trim(to_char(8,'00')) from dual ; --结果为'08',去掉前置空格 来源: https://www.cnblogs.com/imhuanxi/p/12383889.html

C#之获取控制台输入的数字

自作多情 提交于 2020-02-29 17:19:13
今天写K均值算法的时候,需要将控制台输入的初始化簇中心点读入(就是一些数字),读入的方式是一行读入,以空格隔开,回车结束。例如:“1_2_3...” C#中控制台读入的方法也不多,常见的有: 1)Console.Read() 方法读取单个字符,获取的是用户输入的任何值的ASCII值;例如输入的是‘1’,得到的是“49”。该方法是读入一行处理一次。 2)Console.ReadLine()方法读取一行字符串,获取的是输入的一行的整个字符串;该方法是读入一行处理一次。 3)Console.ReadKey()方法读入的是一个按键值,一次读入一个字符。例如:让用户输入Y或者N的时候可以用。实际上这个方法在实际应用中并不用来读入数据,它有另一个功能就是可以使当前程序等待键盘输入,以便退出程序。使调试时能看到输出结果。如果没有此句,命令窗口会一闪而过。(相信初学的会遇到这个问题,作用跟C中的getch()函数一样。) 那么怎么实现我的输入要求呢,我用的是Console.ReadLine()和split()两个方法组合实现的。当然还有更好的方法,等待读者去发现。具体代码如下: Console.Write("\n输入K个初始簇中心点的序号(序号一行输入,以空格隔开,回车结束!)\n"); string str = Console.ReadLine();//从控制台读入输入 string[]

009 预处理 #pragma once; typedef; #ifdef

╄→尐↘猪︶ㄣ 提交于 2020-02-29 16:48:39
/* 目录: 一 #pragma once 二 typedef 三 #ifdef */ 一 #pragma once 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式 二 typedef // 给类型/结构取别名 #include "stdafx.h" typedef char * PCHAR; int main(int argc, char *argv[]) { char szStr[20] = "test"; PCHAR pStr = szStr; printf("%c", *pStr); return 0; } // 系统编写 - minwindef.h typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef FLOAT *PFLOAT; typedef BOOL near *PBOOL; typedef BOOL far *LPBOOL; typedef BYTE near *PBYTE; typedef BYTE far *LPBYTE; typedef int near *PINT;

typedef函数指针用法

安稳与你 提交于 2020-02-29 16:45:49
1.简单的函数指针的应用 形式1:返回类型(*函数名)(参数表) [cpp] view plain copy char (*pFun)( int ); char glFun( int a){ return ;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。 第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址 然后就是main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。 2.使用typedef更直观更方便 形式1:typedef 返回类型(*新类型)(参数表) [cpp] view plain copy typedef char (*PTRFUN)( int ); PTRFUN pFun; char glFun( int a){

volatile

断了今生、忘了曾经 提交于 2020-02-29 16:33:22
很多人对Volatile都不太了解,其实Volatile是由于编译器优化所造成的一个Bug而引入的关键字。 int a = 10; int b = a; int c = a; 理论上来讲每次使用a的时候都应该从a的地址来读取变量值,但是这存在一个效率问题,就是每次使用a都要去内存中取变量值,然后再通过系统总线传到CPU处理,这样开销会很大。所以那些编译器优化者故作聪明,把a读进CPU的cache里,像上面的代码,假如a在赋值期间没有被改变,就直接从CPU的cache里取a的副本来进行赋值。但是bug也显而易见,当a在赋给b之后,可能a已经被另一个线程改变而重新写回了内存,但这个线程并不知道,依旧按照原来的计划从CPU的cache里读a的副本进来赋值给c,结果不幸发生了。 于是编译器的开发者为了补救这一bug,提供了一个Volatile让开发人员为他们的过失埋单,或者说提供给开发人员了一个选择效率的权利。当变量加上了Volatile时,编译器就老老实实的每次都从内存中读取这个变量值,否则就还按照优化的方案从cache里读。 volatile的本意是一般有两种说法--1.“暂态的”;2.“易变的”。 这两种说法都有可行。但是究竟volatile是什么意思,现举例说明(以Keil-c与a51为例 例子来自Keil FQA),看完例子后你应该明白volatile的意思了,如果还不明白

进程和程序:编写shell——《Unix/Linux编程实践教程》读书笔记(第8章)

落爺英雄遲暮 提交于 2020-02-29 15:11:33
1、Unix shell的功能 shell是一个管理进程和运行程序的程序。所有常用的shell都有3个主要功能: (1)运行程序; (2)管理输入和输出 (3)可编程 shell同时也是带有变量和流程控制的编程语言。 2、Unix的进程模型 一个程序是存储在文件中的机器指令序列,一般它是由编译器将源代码编译成二进制格式的代码。运行一个程序意味着将这些机器指令序列载入内存然后让处理器(CPU)逐条执行。在Unix术语中,一个可执行程序是一些机器指令机器数据的序列。一个进程是程序运行时的内存空间和设置。数据和程序存储在磁盘文件中,程序在进程中运行。 每个进程都有一个可以唯一标识它的数字,被称为进程ID,一般简称PID;同时也有一个父进程ID(PPID)。每个进程都与一个终端相连,都一个已运行的时间,有优先级,有niceness级别,有大小。。。 Unix系统中的内存分为系统空间和用户空间。进程存在于用户空间。 3、如何执行一个程序 shell打印提示符,用户输入指令,shell就运行这个命令,然后shell再次打印提示符——如此反复。 一个shell的主循环执行下面的4步: (1)用户键入a.out (2)shell建立一个新的进程来运行这个出现 (3)shell将程序从磁盘载入 (4)程序在它的进程中运行知道结束 即: while (!end_of_input) get

Java基础09常用类

你。 提交于 2020-02-29 14:54:14
一,string类 package com.atguigu.java; import org.junit.Test; /** * String的使用 * * @author shkstart * @create 2019 上午 10:26 */ public class StringTest { /* 结论: 1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。 2.只要其中有一个是变量,结果就在堆中。 3.如果拼接的结果调用intern()方法,返回值就在常量池中 */ @Test public void test4(){ String s1 = "javaEEhadoop"; String s2 = "javaEE"; String s3 = s2 + "hadoop"; System.out.println(s1 == s3);//false final String s4 = "javaEE";//s4:常量 String s5 = s4 + "hadoop"; System.out.println(s1 == s5);//true } @Test public void test3(){ String s1 = "javaEE"; String s2 = "hadoop"; String s3 = "javaEEhadoop"; String s4 =

文件的操作

China☆狼群 提交于 2020-02-29 12:06:30
一直以来对文件的操作过程并不是特别熟悉,贴出以下代码来提醒自己,也从实际的例子中感受文件的操作运用 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Students { char Id[10]; char name[20]; double score; }Student; void main() { Student stu;/ /定义学生结构变量 readText("./tmp/computer.txt"); printf("-------------------------------------\n"); strcpy(stu.Id,"B10003"); strcpy(stu.name,"隔壁老王"); stu.score=99; writeText("./tmp/computer.txt",stu); readText("./tmp/computer.txt"); } void writeText(char *filename,Student stu) { FILE *fp; fp=fopen(filename,"a+");// // a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。 // 读取会从文件的开头开始,写入则只能是追加模式。 // a