char函数

C++ 从键盘、文件读入

会有一股神秘感。 提交于 2020-01-13 14:45:12
Background Info EOF是C语言中为了区分有效数据和输入结束符的。 EOF的输入由系统锁定,windows下是 ctrl+z ,linux/unix下是 ctrl+d . 在 C++ 中,输入输出流被定义为类。C++ 的I/O库中的类称为流类(stream class)。 用流类定义的对象称为流对象。   输入和输出是数据传送的过程,数据如流水一样从一处流向另一处。C++ 形象地将此过程称为流(Stream)。C++的输入输出流是指由若干字节组成的宇节序列,这些宇节中的数据按顺序从一个对象传送到另一对象。流表示了信息从源到目的端的流动。在输入操作时,字节流从输入设备(如键盘、磁盘)流向内存,在输出操作时,字节流从内存流向输出设备(如屏幕、打印机、磁盘等)。流中的内容可以是ASCII字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信息。   实际上,在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。当用cout和插入运算符“<<”向显示器输出数据时,先将这些数据送到程序中的输出缓冲区保存,直到缓冲区满了或遇到endl,就将缓冲区中的全部数据送到显示器显示出来。在输入时,从键盘输入的数据先放在键盘的缓冲区中,当按回车键时,键盘缓冲区中的数据输入到程序中的输入缓冲区,形成cin流,然后用提取运算符“ >>”从输入缓冲区中提取数据送给程序中的有关变量

字符流中第一个只出现一次的字符

自古美人都是妖i 提交于 2020-01-13 05:08:23
请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。 当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。 如果当前字符流没有存在出现一次的字符,返回#字符。 样例 输入:“google” 输出:“ggg#ll” 解释:每当字符流读入一个字符,就进行一次判断并输出当前的第一个只出现一次的字符。 class Solution { public : unordered_map < char , int > count ; queue < char > q ; //Insert one char from stringstream void insert ( char ch ) { if ( ++ count [ ch ] > 1 ) { while ( q . size ( ) && count [ q . front ( ) ] > 1 ) q . pop ( ) ; } else q . push ( ch ) ; } //return the first appearence once char in current stringstream char firstAppearingOnce ( ) { if ( q . empty ( ) ) return '#' ;

【网络编程小结(三)】利用多进程与多线程

∥☆過路亽.° 提交于 2020-01-12 23:35:49
在第一节的例子中,服务器是一个时间获取程序,只要一次write调用就能立刻完成客户端的任务,但是我们要想的是,服务端不一定每次都会这么快的完成任务,所以,要想办法加快服务端的处理速度。 首先可以想到的是并行处理,c++有两种方式,一个是多进程,一个是多线程。下面描述这两种办法。 一、压力测试 我们的客户端应当有能力判断服务端处理的快慢,所以我们要写一个压力测试函数: void request_to_server(int id,const char* ip,const uint16_t port){ int sockfd=socket(AF_INET,SOCK_STREAM,0); const char *id_str=std::to_string(id).c_str(); sockaddr_in addr; bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(port); inet_pton(AF_INET,ip,&addr.sin_addr); connect(sockfd,(const sockaddr*)&addr,sizeof(addr)); const int buffersize=1024; char buf[buffersize]; write(sockfd,id_str

C语言基础:指针

旧街凉风 提交于 2020-01-12 18:10:52
【指针】 一、指针变量与定义 C语言有两种变量:其中变量(普通变量)存储内容值;地址变量(指针变量)存储地址值。 1、定义格式 类型名 *指针变量名;*是指针变量的标志,不包含在变量名里 注: (1)定义变量(普通变量、指针变量)都必须在前面有类型名。前类型后分号为定义语句。除此之外,其它语句都是执行语句。 (2)在定义指针变量时,指针变量名前的 * 表示现定义的是一个指针类型变量。星号并不是指针变量名的一总分,只是一个标志。 (3)指针变量专门用来存地址,禁止将一个整型直接赋给一个指针变量。 2、指针变量的引用 “&”取地址运算符,通过&运算符可以取出普通变量的地址。 “*”指针运算符,*可以取出指针变量所指向的普通变量的值(间接引用普通变量)。功能是 *地址 -》 取出内容值。 “&”“*”是单目运算符,优先级2级,方向从右向左 指针变量运算方法:(口诀四)地址变量得地址,得谁地址指向谁, 有*为内容值,不是读就是写,*在赋值号左边为写,其它都为读。无*为地址值,地址赋值意味着改指向。 注: (1)可以通过赋值使一个指针变量“指向”某一普通变量(指针变量=&普通变量)。 指针变量必须定义且初始化后再使用。 (2)在C语言中正确的做法是先让指针变量指向一个确定的存储单元后,再通过该指针变量引用它所指向的存储单元。 (3)变量名(普通变量、指针变量)都表示其存储单元内的值。 (4

子函数通过一级指针访问二维数组

痞子三分冷 提交于 2020-01-12 17:15:34
#include <stdio.h> #define COLS 10 #define ROWS 6 char erwei[6][10]={{1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1}, {1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1}, {1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1} }; test (char *image){ int i,j=0; for(i=0;i<COLS*ROWS;i++){ printf("image[%d][%d]%d\n",i,j,*image); image++; } } test2 (char *image){ int i,j=0; for(i=0;i<ROWS;i++){ for(j=0;j<COLS;++j){ printf("image[%d][%d]%d\n",i,j,image[i*10+j]); } } } void main() { test((char *)erwei); // test(&erwei); printf("\n\n\n"); test2((char *)erwei); // test2(&erwei); return 0; } 来源: https://www.cnblogs

C++程序设计POJ》《WEEK5 继承和派生》《编程填空》

巧了我就是萌 提交于 2020-01-12 11:42:47
#include <iostream> using namespace std; class Base { public: int val; Base() { cout << "Base Constructor" << endl; } ~Base() { cout << "Base Destructor" << endl; } }; class Base1 :virtual public Base { }; class Base2 :virtual public Base { }; class Derived :public Base1, public Base2 { }; int main() { Derived d; while (1); return 0; }// 打印输出 // Base Constructor//Base Destructor https://blog.csdn.net/qq_23908539/article/details/51454521 描述 写一个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

结对编程

与世无争的帅哥 提交于 2020-01-12 09:15:54
结对编程 Github地址 https://github.com/Corvvus/201831061426.git 结对伙伴 张楠 伙伴学号 201831061423 伙伴博客地址 https://www.cnblogs.com/wxllovezn/p/11683533.html PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 50 Estimate 估计这个任务需要多少时间 20 25 Development 开发 200 200 Analysis 需求分析 (包括学习新技术) 50 40 Design Spec 生成设计文档 20 20 Design Review 设计复审 (和同事审核设计文档) 25 25 Coding Standard 代码规范 (为目前的开发制定合适的规范) 15 15 Design 具体设计 100 80 Coding 具体编码 600 630 Code Review 代码复审 25 20 Test 测试(自我测试,修改代码,提交修改) 30 50 Reporting 报告 30 20 Test Report 测试报告 25 30 Size Measurement 计算工作量 30 20 Postmortem & Process

指针(下)

你。 提交于 2020-01-12 08:21:03
指针作为函数参数: #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> void print(int * arr,int len) { //函数参数中如果有指针 数组 都会转化为指针 sizeof求出来的是指针类型的大小 无符号整数类型 4 所以求出来得知不能作为数组的循环条件 for (int i = 0; i < len; i++) { printf("%d\n", arr[i]); } } int main() { int arr[] = { 1, 2, 3, 4, 6, 0, 7, 8, 9, 10 }; print(arr,sizeof(arr)/sizeof(arr[0])); system("pause"); return EXIT_SUCCESS; } //1.数组作为函数参数可以退化为指针 //2.在传递数组时需要加上传递个数 void print(char * arr) { //两种方式求出字符串长度 int len = strlen(arr); } int main() { char arr[] = "hello world";//有判断条件\0 print(arr); return 0; } 函数的返回值是指针: #define

libevent

我的梦境 提交于 2020-01-12 08:18:40
Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。 Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomit、 Nylon、 Netchat等等。 1. 介绍 libevent是一个用来开发可扩展的网络服务器的事件通知函数库。当一个文件描述符上的特定事件发生或是一个超时时间到达后,libevent API提供一种执行回调函数的机制。而且,libevent还支持基于信号或定期超时的回调功能。 libevent旨在替换在原有事件驱动网络服务器事件循环而设计的。应用程序仅仅需要调用event_dispatch(),然后动态地添加或是移除事件就可以了,而不需要改变原有的事件循环。 目前,libevent支持/dev/poll,kqueue(2),select(2),poll(2)和epoll(4)等高并发网络编程模型。而它对实时信号的支持正处于实验性阶段

C strtok_s函数

*爱你&永不变心* 提交于 2020-01-12 04:57:56
strtok_s是windows下的一个分割字符串安全函数,其函数原型如下: char *strtok_s( char *strToken, const char *strDelimit, char **buf); 这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。在首次调用strtok_s这个功能时候会将开头的分隔符跳过然后返回一个指针指向strToken中的第一个单词,在这个单词后面茶插入一个NULL表示断开。多次调用可能会使这个函数出错,context这个指针一直会跟踪将会被读取的字符串。 第一次执行完之后,strToken指向了第一个字符串,继续执行之后也不会改变,buf存储的是调用完strtok_s剩下的字符串,最终会变成空; 函数实现入下: char str[] = "921504;921506;921507;"; vector<char*> vec; char* context = NULL; char* tmpstr = strtok_s(str, patstr,&context); while (tmpstr != NULL) { vec.push_back(tmpstr); tmpstr = strtok_s(NULL, patternstr.c_str(),&context); } cout << str << " " <<