char函数

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符\"go\"时,第一个只出现一次的字符是\"g\"。当从该字符流中读出前六个字符“google\"时,第一个只出现一次的字符是\"l\"。

邮差的信 提交于 2020-03-24 23:46:15
public class Solution { //Insert one char from stringstream int[] arr = new int[256]; int temp = 1; public void Insert(char ch) { if(arr[ch] == 0){ arr[ch] = temp++; } else{ arr[ch] = -1; } } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { int num = Integer.MAX_VALUE; char ch = '#'; for(int i = 0; i < 256; i++){ if(arr[i] != 0 && arr[i] != -1 && arr[i] < num){ num = arr[i]; ch = (char)i; } } return ch; } } 来源: https://www.cnblogs.com/q-1993/p/10950039.html

个人项目(C语言)

被刻印的时光 ゝ 提交于 2020-03-24 16:35:06
GitHub地址: https://github.com/dachai9/personal-project.git 1. WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。 实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。 具体功能要求: 程序处理用户需求的模式为:wc.exe [parameter][ file_name ] 基本功能列表: wc.exe -c file.c //返回文件 file.c 的字符数。 --完成 wc.exe -w file.c //返回文件 file.c 的词的数目。 --完成 wc.exe -l file.c //返回文件 file.c 的行数。 --完成 扩展功能: -s 递归处理目录下符合条件的文件。 --完成 -a 返回更复杂的数据(代码行 / 空行 / 注释行)。 --完成 (空行的格式控制字符只识别%d) 空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。 代码行:本行包括多于一个字符的代码。 注释行:本行不是代码行,并且本行包括注释

strtok和strtok_r

旧巷老猫 提交于 2020-03-24 07:14:51
strtok和strtok_r 原型:char *strtok(char *s, char *delim); 功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 strtok在s中查找包括在delim中的字符并用NULL('/0')来替换,直到找遍整个字符串。 返回值 :从s开头開始的一个个被切割的串。当没有被切割的串时则返回NULL。 全部delim中包括的字符都会被滤掉,并将被滤掉的地方设 为一处切割的节点。 举例: #include < string .h > #include < stdio.h > int main( void ) { char input[ 16 ] = " abc,d " ; char * p; /* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, " , " ); if (p) printf( " %s " , p); /* A second call to strtok using a NULL as the first parameter returns a pointer to the character following

手机、ESP32单片机、MQTT服务器连接实验

旧时模样 提交于 2020-03-23 16:53:33
实验目的:通过自己制作的手机APP,连接MQTT服务器,获取ESP32单片机的温湿度信息,控制ESP32单片机上的LED开关。 实验准备: 1、硬件:ESP32开发板(型号不限,esp01s也可以)、LED灯、DH11温湿度传感器、面包板等 2、软件: (1)arduino软件,可以到官网 https://www.arduino.cc/en/Main/Software 下载。 (2)App Inventor 2 集成版,可以到官网 https://www.wxbit.com/ 下载。(解释一下:这个软件是适用于初学者的手机APP制作软件,界面设计所见即所得,程序设计通过拖拽积木块来实现。) (3)需要一台服务器。(可以是自己的电脑,也可以到网上买云服务器,笔者是购买的腾讯云服务器(每年79元),除了运行网站外,再捎带着提供MQTT服务。) 实验步骤: 一、总体设想 1、建一个MQTT服务器,提供订阅/发布 消息的功能。 2、用App Inventor 2 制作一个APP,功能是连接MQTT服务器,订阅ESP32单片机的温湿度信息,控制ESP32单片机上的LED开关。 3、为ESP32编写程序并烧录,完成连接MQTT服务器,发布温湿度信息,订阅LED控制主题,根据消息来开、关LED灯。 二、MQTT服务器的建立 MQTT是IBM开发的一个即时通讯协议

Linux编程简介——静态链接库

℡╲_俬逩灬. 提交于 2020-03-23 13:44:51
有时我们需要将一组代码编成一个库,从而方便其复用。例如,我们调用的STL和系统函数都是以这种方式提供的。另外,当项目工程较大时,为了使其模块化方便分工,有时也需要将其创建自己的链接库。 链接库按照其链接方式可以分为动态链接库和静态链接库两种,本文主要介绍一下静态链接库的创建方式。 以一个简单的代码为例,这里有两个文件main.c和stack.c,这里打算把stack.c作为一个lib供main.c调用。 /* stack.c */ char stack[512]; int top = -1; char pop( void ) { return stack[top--]; } void push( char c ) { stack[++top] = c ; } /* main.c */ #include <stdio.h> char pop(); void push( char c); void main( void ) { push( 'a' ); push( 'b' ); printf( "%c\n" , pop()); } 要把stack.c编成lib,需要经过如下两个步骤: 通过gcc –c命令将stack.c编成stack.o 通过ar命令将stack.o封装成libstack.a gcc -c stack.c ar cr libstack.a stack.o

C++项目中的extern \"C\" {}

浪尽此生 提交于 2020-03-23 13:12:09
引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif 它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它: 1、#ifdef _cplusplus/#endif _cplusplus及发散 2、extern "C" 2.1、extern关键字 2.2、"C" 2.3、小结extern "C" 3、C和C++互相调用 3.1、C++的编译和连接 3.2、C的编译和连接 3.3、C++中调用C的代码 3.4、C中调用C++的代码 4、C和C++混合调用特别之处函数指针 1、#ifdef _cplusplus/#endif _cplusplus及发散 在介绍extern "C"之前,我们来看下#ifdef _cplusplus/#endif _cplusplus的作用。很明显#ifdef/#endif、#ifndef/#endif用于条件编译,#ifdef _cplusplus/#endif _cplusplus——表示如果定义了宏_cplusplus,就执行#ifdef/#endif之间的语句,否则就不执行。 在这里为什么需要#ifdef _cplusplus/#endif

堆和栈的区别(转过无数次的文章)

这一生的挚爱 提交于 2020-03-23 11:08:04
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 - 程序结束后由系统释放。 4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 二、例子程序 这是一个前辈写的,非常详细 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char *p3 = "123456"; 123456/0在常量区,p3在栈上。 static int c =0; 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配得来得10和20字节的区域就在堆区。

typedef用法剖析

夙愿已清 提交于 2020-03-23 07:20:08
typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。 如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法? 使用 typedefs 为现有类型创建同义字。 定义易于记忆的类型名   typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如: typedef int size;   此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size: void measure(size * psz); size array[4]; size len = file.getlength(); std::vector <size> vs;   typedef 还可以掩饰符合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组: char line[81]; char text[81];

oracle常见日期函数

倾然丶 夕夏残阳落幕 提交于 2020-03-23 06:02:35
--常用日期函数 1、Sysdate 当前日期和时间 Select sysdate from dual; 2、Add_months(d,n) 当前日期d后推n个月 用于从一个日期值增加或减少一些月份 当前日期后两个月: Select add_months(sysdate,2) from dual; 当前日期前三个月: Select add_months(sysdate,-3) from dual; ADD_MONTHS是运算函数,函数将一个日期上加上一指定的月份数,所以,日期中的日是不变的。然而,如果开始日期是某月的最后一天,那么,结果将会调整以使返回值仍对应新的一月的最后一天。如果,结果月份的天数比开始月份的天数少,那么,也会向回调整以适应有效日期。 3、dbtimezone()返回时区 select dbtimezone from dual; 4,round[舍入到最接近的日期](day:舍入到最接近的星期日) select sysdate S1, round(sysdate) S2 , round(sysdate,'year') YEAR, round(sysdate,'month') MONTH , round(sysdate,'day') DAY fromdual 5、next_day( date, weekday )指定日期的下一个日期 语法 : next_day(

作业5-继承和派生

这一生的挚爱 提交于 2020-03-22 16:53:51
1.全面的MyString 输出: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8. ijAl- 9. ijAl-mnop 10. qrst-abcd- 11. abcd-qrst-abcd- uvw xyz about big me take abcd qrst-abcd- 1 /*使程序输出指定结果*/ 2 #include <cstdlib> 3 #include <iostream> 4 using namespace std; 5 int strlen(const char * s) 6 { int i = 0; 7 for(; s[i]; ++i); 8 return i; 9 } 10 11 void strcpy(char * d,const char * s) 12 { 13 int i = 0; 14 for( i = 0; s[i]; ++i) 15 d[i] = s[i]; 16 d[i] = 0; 17 18 } 19 20 int strcmp(const char * s1,const char * s2) 21 { 22 for(int i = 0; s1[i] && s2[i] ; ++i) { 23 if( s1[i] < s2[i] ) 24