自己动手编写string类
- 格式:pdf
- 大小:222.91 KB
- 文档页数:8
⾃⼰动⼿写⼯具:⾃动点击⼩插件⼀、模拟点击操作应⽤场景 当我们需要对⼀个⽹页上的某个按钮进⾏多次点击以求得某种“好处”的时候,例如天猫的抢红包活动,我们可能需要点击N次之后才有可能获得⼀个红包,但是这个N是⼀个未知数,有可能我们要不停地点击半个⼩时甚⾄⼀个⼩时都还⽆法获得,⾃⼰估计也会点⿏标点得醉了。
因此,针对这种情况,我们希望⾃⼰写⼀个⼩⼯具来让计算机帮我们做这件事。
既然是让计算机模拟我们的点击操作,其思路⾃然是找到指定的按钮或图⽚,循环对其执⾏click事件。
于是,我们开始对其做⼀个最简单的实现来看看其基本思路。
⾸先,我们准备⼀个⽹站,这⾥我是⽤开发了⼀个⽹页,其中有⼀张图⽚作为抢红包的按钮图⽚,然后写了⼀个⼀般处理程序。
(1)前端⽹页的HTML代码:<!DOCTYPE html><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>测试页⾯</title><script src="Resource/Js/jquery-1.5.1.min.js"></script><script type="text/javascript">$(function () {$("#btnGetMoney").bind("click", function () {$.ajax({type: "GET",url: "MyServiceHandler.ashx?action=GetRedEnvelope",dataType: "json",success: function (data) {if (data.success) {alert("恭喜!您已获得红包:" + data.message + " 元");}else {alert("您的⼿⽓不好,下次再来抢吧");}},error: function () {alert('服务器未响应!');}});});});</script></head><body><div style="text-align:center;"><hr /><img id="btnGetMoney" src="Resource/Image/red2014.png" alt="抢红包" style="cursor:pointer;"/><hr /></div></body></html>View Code 其显⽰效果如下图所⽰: (2)后端⼀般处理程序代码:public void ProcessRequest(HttpContext context){context.Response.Buffer = true;context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);context.Response.AddHeader("pragma", "no-cache");context.Response.AddHeader("cache-control", "");context.Response.CacheControl = "no-cache";context.Response.ContentType = "text/plain";string returnJson = null;if (!string.IsNullOrEmpty(context.Request["action"])){switch (context.Request["action"].ToString()){case"GetRedEnvelope":context.Response.ContentType = "text/XML";returnJson = GetRedEnvelope(context);break;}}context.Response.Write(returnJson);context.Response.End();}private static Random ran = new Random();private string GetRedEnvelope(HttpContext context){JsonObject json = new JsonObject();int number = ran.Next(1, 100);if (number > 95){// 5%的⼏率获得红包json.success = true;}else{json.success = false;}json.message = number.ToString();JavaScriptSerializer serializer = new JavaScriptSerializer();return serializer.Serialize(json);}View Code 当⽤户点击前端⽹页中的图⽚时,会发出⼀个AJAX请求到服务端,服务端会⽣成⼀个1到100之间的随机数来模拟概率,只有在随机⽣成的数字达到95以上(即5%的概率)才给⽤户返回获得红包的效果。
⾃⼰动⼿,丰⾐⾜⾷。
普通键盘实现键盘宏(Windows和Mac版)很多⾼端机械键盘,⽀持宏定义,例如我们可以设置"D"键为"dota",这样当我们按⼀下宏开启键,再按⼀下"D"键,就等价于分别按了"d" "o" "t" "a"四个键。
这时就可以把⼀些敲代码时常⽤的模板定义成键盘宏,到时候⼀键补全代码,既⾼效⼜装X。
另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。
那么问题来了。
⼭⾥来的买不起机械键盘的穷B同时⼜是程序员应该怎么办。
其实这样简单的功能不⼀定⾮要硬件⽀持,借助⼀些现有软件模拟⼀下键盘就好了,在windows下有按键精灵和AutoHotKey这些神器,模拟起来很容易,⽽且体验⾮常完美。
我是借助按键精灵实现的,按键精灵语法很简单,例如 KeyPress "A", 3 就表⽰按A键3次,⽽且⽀持全局快捷键启动,⽀持监听⽤户输⼊,真是简单到⽆情。
不过问题⼜来了。
键盘宏主要是按⼀系列按键,如果每个按键都写⼀⾏ KeyPress "X", 1 ,有的还得配合Shift键才能按出来,也是累,⽽且⼀⾏⼀句代码,看上去不直观,容易写错。
那就写个代码⽣成器就好了,我是⽤C语⾔+std::string实现的,直接把宏写成字符串,⽣成器⾃动输出相应的按键,粘贴到按键精灵中编译保存就好了。
贴⼀下代码:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <ctype.h>5 #include <string>67using std::string;89enum class OpType {10 Press,11 Down,12 Up13 };1415enum class CombKey {16 Shift,17 Ctrl,18 Alt19 };2021void initTransHash(); //初始化按shift才能打出的字符22void transfer(char c); //shift打出的字符转化为真正的按键23void procOpType(OpType type); //输出按键操作24void callKey(OpType type, char key, int count=1); //按键25void callKey(OpType type, string key, int count=1); //重载,按功能键26void keyComb(CombKey comb, char key); //组合键272829const int delay = 2;30string transChar;31char transHash[256];323334int main() {35 initTransHash();3637string keys = "function() {\n},";3839for(char key : keys) {40if(strchr(transChar.c_str(), key) != NULL) {41 transfer(key);42 } else {43if(isupper(key)) {44 keyComb(CombKey::Shift, key);45 } else {46 callKey(OpType::Press, key);47 }48 }49 }50 }5152void initTransHash() {53 memset(transHash, 0, sizeof(transHash));5455//56// ~ ! @ # $ % ^ & * ( ) _ + { } | : \" < > ?57// ` 1 2 3 4 5 6 7 8 9 0 - = [ ] \\ ; ' , . /5859 transChar = "~!@#$%^&*()_+{}|:\"<>? \n";60string keys = "`1234567890-=[]\\;',./\0\0";6162// transChar空格后⾯的字符不加⼊hash表63for(int i = 0; i < keys.size(); i++) {64 transHash[transChar[i]] = keys[i];65 }66 }6768void transfer(char c) {69if(transHash[c]) {70 keyComb(CombKey::Shift, transHash[c]);71return;72 }73switch(c) {74case'\n':75 callKey(OpType::Press, "Enter");76break;7778case'':79 callKey(OpType::Press, "Space");80break;8182default:83 printf("[Red] cant transfer: %c\n", c);84break;85 }86 }8788void procOpType(OpType type) {89switch(type) {90case OpType::Press:91 printf("KeyPress "); break;92case OpType::Down:93 printf("KeyDown "); break;94case OpType::Up:95 printf("KeyUp "); break;96 }97 }9899void callKey(OpType type, char key, int count) {100 procOpType(type);101 printf("\"%c\", %d\n", islower(key) ? key-32 : key, count);102 printf("Delay %d\n", delay); //每次按键后延迟10毫秒103 }104105void callKey(OpType type, string key, int count) {106 procOpType(type);107//printf("\"%s\"\n", key.c_str());108 printf("\"%s\", %d\n", key.c_str(), count);109 printf("Delay %d\n", delay); //每次按键后延迟10毫秒110 }111112void keyComb(CombKey comb, char key) {113string combKey;114switch(comb) {115case CombKey::Shift:116 combKey = "Shift"; break;117case CombKey::Ctrl:118 combKey = "Ctrl"; break;119case CombKey::Alt:120 combKey = "Alt"; break;121default:122return;123 }124125 callKey(OpType::Down, combKey);126 callKey(OpType::Press, key);127 callKey(OpType::Up, combKey);128 }按键精灵_键盘宏_代码⽣成器然后把每⼀个键盘宏写成⼀个函数,通过按下按键精灵的全局快捷键启动,然后脚本监听⽤户按键,然后调⽤相应函数执⾏键盘宏就可以了,模板类似这样:1 choose = WaitKey()2 TracePrint choose34 Select Case choose5 Case 706 KeyPress "BackSpace", 17 Call F()8 Case 729 KeyPress "BackSpace", 110 Call H()11 End Select1213// 按下F键14 Sub F()15 End Sub1617// 按下H键18 Sub H()19 End Sub按键精灵_键盘宏_模板(宏键也会打印出来,所以我在调⽤函数打印键盘宏之前,调⽤BackSpace删除了宏键的字符)然后问题⼜来了。
c++ string类的常用方法x1、string类的构造函数string类的构造函数有三种:(1)默认构造函数:string();(2)以字符串常量指针为参数的构造函数:string (const char *s);(3)以字符串对象为参数的构造函数:string (const string &str);2、string类的赋值操作string类的赋值操作有以下几种:(1)以字符串常量指针为参数的赋值运算符重载:string & operator = (const char *s);(2)以字符串对象为参数的赋值运算符重载:string & operator = (const string &str);(3)拼接函数:string &append (const string &str);(4)两个字符串的拼接:string + string;3、string类的比较操作string类的比较操作有如下几种:(1)比较两个字符串是否相等的比较操作符:string==string;(2)比较两个字符串是否不等的比较操作符:string!=string;(3)比较两个字符串大小的比较操作符:string>string;4、string类的查找操作string类的查找操作有以下几种:(1)查找从某个位置开始某个子串的位置的函数:size_tfind(const string &str,size_t pos = 0);(2)查找从某个位置开始某个字符的位置的函数:size_tfind(char c,size_t pos = 0);(3)查找从右向左某个子串的位置的函数:size_t rfind(const string &str,size_t pos = string::npos);(4)查找从右向左某个字符的位置的函数:size_t rfind(char c,size_t pos = string::npos);5、string类的修改操作string类的修改操作有以下几种:(1)插入字符串的函数:string &insert (size_t pos, const string &str);(2)替换某个子串的函数:string &replace (size_t pos, size_t len, const string &str);(3)删除某个子串的函数:string &erase (size_t pos = 0, size_t len = npos);(4)在字符串前面补充某字符的函数:string &insert (size_t pos, size_t n, char c);(5)清除字符串的函数:void clear();6、string类的截取操作string类的截取操作有以下几种:(1)从某个位置截取字符串的函数:string substr (size_t pos = 0, size_t n = npos);(2)将字符串按照一定的字符分割成多个小字符串的函数:vector<string> split(char c);(3)删除收尾处的某字符的函数:string &trim(char c);。
string的几种构造函数在编程中,字符串(string)是一种非常常用的数据类型,用于存储和操作文本。
在C++语言中,string类是用来表示和操作字符串的类。
string类提供了多个构造函数,用于创建字符串对象。
本文将介绍string的几种构造函数,并详细解释它们的用法。
1. 默认构造函数string类的默认构造函数创建一个空的字符串对象。
空字符串是一个长度为0的字符串,不包含任何字符。
我们可以使用以下语法来创建一个空字符串对象:string str;2. 字符数组构造函数string类还提供了一个构造函数,可以使用字符数组来创建字符串对象。
字符数组是一系列字符的集合,以null字符('\0')结尾。
我们可以使用以下语法来创建一个字符串对象:char arr[] = "Hello";string str(arr);这样,str将包含字符数组arr中的所有字符,并以null字符结尾。
需要注意的是,字符数组的长度必须小于或等于字符串对象的最大长度。
3. 字符串构造函数除了字符数组,我们还可以使用另一个字符串来创建字符串对象。
string类提供了一个接受另一个字符串作为参数的构造函数。
我们可以使用以下语法来创建一个字符串对象:string str1 = "Hello";string str2(str1);这样,str2将包含与str1相同的内容。
这个构造函数会创建一个新的字符串对象,而不是简单地将str2指向str1。
4. 子字符串构造函数string类还提供了一个构造函数,可以使用另一个字符串的一部分来创建一个新的字符串对象。
我们可以使用以下语法来创建一个子字符串对象:string str1 = "Hello World";string str2(str1, 0, 5);这样,str2将包含str1中从索引0开始的5个字符,即"Hello"。
string的创建方式在计算机编程中,字符串(string)是一种常用的数据类型,用于表示文本或字符序列。
在许多编程语言中,创建字符串有多种方式,下面将介绍一些常见的字符串创建方式。
1. 使用双引号或单引号最常见的创建字符串的方式是使用双引号或单引号将一段文本括起来。
例如,可以使用双引号创建一个包含"Hello World!"的字符串:"Hello World!"。
同样地,使用单引号也可以创建相同的字符串:'Hello World!'。
使用引号创建的字符串可以包含任意字符,包括字母、数字、标点符号等。
2. 使用字符串连接符另一种常见的创建字符串的方式是使用字符串连接符将多个字符串连接在一起。
在许多编程语言中,字符串连接符通常是加号(+)。
例如,可以通过以下方式创建一个包含"Hello"和"World!"的字符串:"Hello" + "World!"。
在这个例子中,加号将两个字符串连接在一起,形成一个新的字符串。
3. 使用字符串模板或格式化字符串一些编程语言提供了更灵活的字符串创建方式,例如字符串模板或格式化字符串。
这种方式允许将变量或表达式的值嵌入到字符串中。
例如,可以使用字符串模板或格式化字符串创建一个包含变量name的字符串: "Hello, ${name}!"。
在这个例子中,${name}会被变量name的值替换。
4. 使用字符串构造函数许多编程语言提供了字符串构造函数,可以使用这些构造函数来创建字符串对象。
例如,在Java中,可以使用String类的构造函数创建字符串对象:new String("Hello World!")。
这种方式可以将字符串包装成对象,提供了更多的字符串操作方法。
5. 使用字符串字面量一些编程语言提供了特殊的语法来创建字符串字面量。
c语言设计体会与心得5篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如个人总结、工作计划、心得体会、演讲致辞、应急预案、规章制度、策划方案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays for everyone, such as personal summaries, work plans, insights, speeches, emergency plans, rules and regulations, planning plans, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!c语言设计体会与心得5篇心得体会是一种对学习过程中的感悟和体验的总结和表达,可以帮助他人更好地理解学习的意义,大家可以通过写心得体会来激发自己的思考和创新能力,从而找到解决问题的新途径和方法,以下是本店铺精心为您推荐的c语言设计体会与心得5篇,供大家参考。
string在c语言中的用法字符串是一种重要的数据类型,它在C语言中有很多的应用。
在C语言中,字符串是由char类型的字符数组来实现的。
每个字符都占用一个字节,以\0作为字符串的结束标志。
字符串的定义:字符串的定义方式为:char str[]=”Hello World”;其中,str是一个字符数组,用于存储字符串,“Hello World”是字符串字面值。
由于字符串需要以\0作为结束标志,因此在定义字符串时,必须保证字符串后面有一个\0。
字符串的输入输出:字符串的输入输出可以使用库函数puts和gets。
其中,puts用于输出字符串,gets用于输入字符串。
puts(str) 输出字符串strgets(str) 输入字符串str字符串的长度:在C语言中,可以使用strlen函数来计算字符串的长度。
strlen函数用于计算字符串的字符个数,不包括字符串末尾的\0。
例如,strlen("hello")的返回值为5。
字符串的复制:在C语言中,可以使用strcpy函数来复制字符串。
strcpy函数用于将一个字符串复制到另一个字符串中。
例如,strcpy(dest, src)表示将src复制到dest中。
字符串的比较:在C语言中,可以使用strcmp函数来比较两个字符串的大小。
strcmp函数用于比较两个字符串的大小,根据比较结果返回一个整数。
如果第一个字符串小于第二个字符串,返回负数;如果第一个字符串等于第二个字符串,返回0;如果第一个字符串大于第二个字符串,返回正数。
例如,strcmp("hello", "world")的返回值为负数。
字符串的连接:在C语言中,可以使用strcat函数来连接两个字符串。
strcat函数用于将一个字符串连接到另一个字符串的后面。
例如,strcat(dest, src)表示将src连接到dest的后面。
字符串的查找:在C语言中,可以使用strstr函数来查找字符串。
String类的常⽤⽅法⼀、String类String类在ng包中,java使⽤String类创建⼀个字符串变量,字符串变量属于对象。
java把String类声明的final类,不能有类。
String类对象创建后不能修改,由0或多个字符组成,包含在⼀对双引号之间。
⼆、String类对象的创建字符串声明:String stringName;字符串创建:stringName = new String(字符串常量);或stringName = 字符串常量;三、String类常⽤⽅法1.String类长度:String没有length的属性,有length()这个⽅法,可以获取字符串的长度。
可以求得字符串s的长度,但是该长度会包含空格。
2.indexOf()/lastIndexOf():可以获取指定字符串的索引位置。
indexof()返回的是⾸次搜索字符出现的索引;lastindexof()返回的是搜索字符最后出现的索引。
ps:索引是从0开始计算。
3.charAt()⽅法:可以获取指定索引处的字符,返回的字符的索引4.去除字符串间的空格:trim()只能去掉字符串前后的空格,replaceAll()则可以去掉所有的空格。
5.replace()和replaceFirst():字符串的替换。
replace()替换的是所有与指定字符串项⽬匹配的字符串;replaceAll()⽤于替换第⼀个出现的指定字符串。
6.判断字符是否相等:equals()和equalsIgnoreCase(),其中equalsIgnoreCase()⽐较是不区分⼤⼩写,⽽equals()则是区别⼤⼩写,然后进⾏字符串的字符和长度⽐对。
ps:equals()和equalsIgnoreCase()两者在区分(不区分)⼤⼩写的情况下,进⾏内容的完全⽐对。
“==”则是⽐较在内存中的位置,⼀般不⽤来对⽐字符串。
7.字符串的分割:spilt(),对字符串进⾏分割,并将分割后的结果放在字符串数组中。