精华内容
下载资源
问答
  • 字符串与文件I/O

    2017-03-03 14:41:57
    LabVIEW在功能模板上的字符串子模板中提供了一整套的字符串处理函数,能够完成各种字符串处理功能。常用的字符串对象包括字符串输入控件和字符串显示控件,它们位于控件→新式→字符串与路径→字符串输入控件,字符...

    字符串

    字符串是ASCII码字符的集合,当用户与GPIB和串行设备的通信,读写文本文件以及传递文本信息时,字符串都是非常有用的。字符串中的字符有些是可显示的,有些则是不可显示的。

    LabVIEW在功能模板上的字符串子模板中提供了一整套的字符串处理函数,能够完成各种字符串处理功能。常用的字符串对象包括字符串输入控件和字符串显示控件,它们位于控件→新式→字符串与路径→字符串输入控件,字符串显示控件。如图:

    字符串的显示方式:

    在前面板上放置一个字符串输入控件,右击鼠标,弹出如图所示的菜单:

    从上图中可以看出字符串有4种显示方式

    下图是“www avrvi.com”分别用这4种方式显示,如图:

    字符串函数

    打开程序框图中的字符串函数,如图:

    字符串函数模板除了包含一般的字符处理函数以外,还包含各种字符常量,以及字符串与数字量,路径的相互转换函数。

    其中最后一行包含了各种常量,可以方便的使用。

    字符串应用举例:

    例一:组合字符串

    该例的目的是将一些字符串和数值转化成一个新的输出字符串。

    1. 新建一个VI,在前面板上放置字符串输入控件“命令字”和“单位”,符串显示控件“输出命令字符”,数值输入控件“数值”和数值显示控件“字符串长度”。
    2. 切换到程序框图,在字符串函数模板中选择“格式化写入字符串”,如图连线:

    3. 双击“格式化写入字符串”函数,弹出如图所示对话框

      对它进行参数设定,将分数的长度改为4,如图:

    4. 同样在程序框图中添加“字符串长度”函数计算字符串的长度,它用于返回输出的命令字符串的长度。
    5. 完成连线,如图:

      运行结果如图:

    例二:字符串子集和数值的提取

    实际应用中很多情况下,必须把字符串转换成数值,例如需要将从仪器中得到的数据字符串转换成数值。

    该例的目的是从一个输入的字符串中,提取一个子字符串,另外扫描字符串,将子字符串转换为数据。

    1. 新建一个VI,按照如图所示放置输入和输出控件。

    2. 切换到程序框图,从字符串函数模板中,选择“部分字符串”函数,在该例中,它的功能是返回从偏移地址开始的指定长度的子字符串。
    3. 选择“扫描字符串”函数,它用于扫描字符串,并将有效的数值(0~9,正,负,e和E)转换成数值。如果连接了一个格式字符串,它将根据字符串指定的格式进行转换,否则将进行默认格式的转换,该函数的初始扫描位置参数用于设置初始扫描位置,它与“数字相对偏移量”相连。
    4. 完成连线,如图:

      运行结果如图:

      注意:LabVIEW的偏移地址是从0开始计数的。

    文件I/O

    文件输入输出是程序设计中的一个重要概念,一般来说,文件是存储在磁盘伤的数据的集合。文件输入与输出就是要在磁盘文件中保存和读取信息数据,以文件形式存储起来的数据具有“永久性”,数据文件不仅可以与LabVIEW语言编写的其他VI交换数据,而且可以被其他程序共享。

    文件输入与输出操作主要包括3个基本的步骤:新建或者打开一个已有的文件,对文件进行读写和关闭文件。

    LabVIEW支持的文件格式主要包含以下3种:

    • ASCII码文本格式文件
    • 二进制格式文件
    • LabVIEW数据记录文件
    1. ASCII码文本格式文件

      文本文件又称为ASCII码文件或字符文件,它的每一个字节代表一个字符,存放的是这个字符的ASCII码。文本文件的优点是它几乎在任何应用程序中都是可读的,这种文件最易于进行整体互换,用户可以用其他的软件来访问数据,例如字处理软件Word或者Excel等,在仪器控制系统中的大部分控制指令也是用文本字符串。当然在写文件之前必须要将所有的数据都变成ASCII字符串格式,读文件之后要将字符串恢复为原数据值。

      文本文件的缺点是占用的磁盘空间较大,比如存储一个浮点数-864.39571,因为每个字符要占用一个字节,所以需要10个字节空间。文本文件的存取数据过程中存在ASCII码与机器内码的转换,所以存取数据的速度也比较慢。

    2. 二进制格式文件

      二进制文件是把数据按其在内存中存储的形式(机器内码)原样输出到磁盘上,所以它的存取速度最快,格式也最紧凑。二进制格式占用的磁盘空间比ASCII码文本文件要小得多,对于上诉的浮点数-864.39571,如果存储为单精度型,只占用4个字节,要是存储为双精度型,则占用8个字节。

      用户在读写二进制文件时,必须明确文件使用的时哪一种数据类型,各种类型的二进制文件之间是不能通用的。二进制格式文件可以随机的访问其中的某一数据。而这一点是文本文件无法比拟的,要想在文本文件中访问某一数据,则必须把它之前的数据全部都读出来,才可以访问所需要的数据。

    3. 数据记录文件

      数据记录文件也是一种二进制格式的文件,只有LabVIEW才可以对它进行读取和处理。数据记录文件可以看成是数据库文件格式,它将数据存储为一系列相互独立的有各自数据类型的记录,就像簇一样,每一个记录可以包含不同类型的数据,这些数据类型是由用户事先指定的。LabVIEW允许用户自由读取数据记录文件,在各个记录中索引出不同数据类型的数据,并且每一个记录文件都包含由时间标记。

      LabVIEW在程序框图上的为我们提供了一整套功能强大而且方便灵活的文件输入/输出函数,如图:

      具体每个控件的作用和功能不在这里向大家详细地介绍,下面将通过一系列地例子来说明各种文件的读取。

    例一:

    使用“写文本文件”函数写文本文件

    1.新建一个VI,在前面板上放置一个“波形图表”,将标签内容改为“温度”,取消显示曲线图注和X,Y坐标轴标签,同时放置一个数字输入控件,将标签改为“采样点数”。再放入一个“文件路径输入控件”,它位于控件→新式→字符串与路径→文件路径输入控件,如图:

    2.后面板程序如图:

    其中用到了一个LabVIEW自带的程序Digital Thermometer.vi,在程序框图中点击“选择VI…”,如图:

    系统会自动打开一个对话框,如图:

    在我的计算机里,它位于labview8.2→Activity→Digital Thermometer,如图:

    其中在“格式化写入字符串”函数上的“%3.f\n”是转换后保留三位小数,字符串间以回车间隔。

    回到前面板,点击“路径”右边的小图标:

    打开一个对话框,选择文件的存储路径,如图:

    选择完后,程序即可运行,运行结果如图:打开记事本,即可看到写入的文件,如图:

    此程序中利用了For循环自动索引的功能,一次产生了10个数据,然后逐一写入文本。正因为此,“写入文本文件”是高层文件I/O操作函数,高层文件I/O操作函数每调用一次就会实现创建或打开文件,读写文件,关闭文件的整个过程。如果需要向文件中连续写入数据,这样的效率是非常低的。如果想要提高效率,可以采用底层文件I/O操作函数来实现写文本文件。

    例二:

    使用底层文件I/O操作函数向文本文件写入数据。

    图中框起来的便是底层文件I/O函数

    前面板的构建和例一类似,下面是程序框图:

    从途中可以看出,程序进行循环后,文件则被打开,这样就可以一直向文件中输入数据,直到循环结束,才关闭文件,它大大提高了写文件的效率。

    运行结果如图:

     

    从上图可以看出,每两个数字之间正好间隔一个Tab定界符。

    例三:写电子表格文件

    “写入电子表格文件”函数的应用与“写入文本文件”函数的应用十分相似。它能直接写入一维或是二维的数据。程序框图如图:

    图中Generate Waveform.vi也使LabVIEW自带的一个VI,它与前面所讲的Digital Thermometer.vi在同一个文件夹里,它是用于模拟产生抽样信号的。该函数默认的是将数据在表格中按行排列,那么一个二维数组的记录则只有两行,若在该接口中给其赋值“真”,则数据会按列排列。

    运行结果如图:

    打开保存的电子表格文件,即可看到数据

    例四:读文本文件

    该例采用在例一中保存的文件,程序框图如图:

    说明:其中用到了一个LabVIEW自带的子VI:Extract Numbers,它位于LabVIEW8.2→examples→general→strings,如图:

    单击确定后,系统会弹出下面的对话框:

    选择Extract Numbers.vi,它的作用是提取由逗号,分行符号,非数值字符等分隔开的数据所组成的ASCII字符串,并将它们转换成数值数组,用于将读取的字符串转换为双精度数据类型的一维数组。运行结果如图:

    例五:另一种读取文本文件的方法

    上面的例子是用一个函数完成了,文件的打开,读取,关闭。和写入文本文件时一样,我们也可以通过三个函数来实现以上的三个步骤,程序框图如图:

    其中For循环默认的是自动索引,在连线后,需将图中框起来的两个节点禁用索引。运行结果如图:

    例六:读取电子表格文件

    本例使用例三所产生的表格文件。

    程序框图如图:

    运行结果如图:

    从结果中可以看到,因为例三在生成表格文件时采用的格式为“%.3f\t”,所以从该电子表格中读取数据时,中间的一行空白LabVIEW会自动把它们默认为0数组,从而在波形图表中显示的时候会出现中间的一行红线。

    展开全文
  • 前台js数组json字符串,后台json字符串转为json数组,最后转换成集合的具体实现

    前台js数组json字符串,后台json字符串转为json数组,最后转换成集合的具体实现

    前台js数组json字符串

    $("#savaUserSet").click(function(){
    
     		var JSONArr=[];
     		$("i[name='eventName']").each(function() {//获取所有name属性为eventName的i标签,并遍历
     			if(!($(this).hasClass("active"))){
     				var eventCode=$(this).attr("id");
     				var eventName=$(this).html();
     				var activityTypeCode=$(this).parent().prev().children("span").eq(0).attr("value");
     				var JSONObject= {
     						"userid":userid,
     						"activityCode":activityTypeCode,
     						"eventCode":eventCode 
     						};
     				JSONArr.push(JSONObject);
     			}
    		});
     		var JSONArrStr=JSON.stringify(JSONArr);//js数组转json字符串
     		$.ajax({//ajax其实可以不用管了
     			method : "POST",
     			url : "../../privacyProtect/savaUserGenPrivacySet.do",
     			dataType : "json",
     			data:{
     				"JSONArrStr":JSONArrStr,
     				"userid":userid 
     			},
     			beforeSend: function () {
    		        // 禁用按钮防止重复提交,发送前响应
     			waitingDialog.show("正在提交数据,请稍候",{dialogSize: 'sm'});
    		        $("#savaUserSet").attr({ disabled: "disabled" });
    		        
    		    },
    		    complete: function () {//完成响应
    		        $("#savaUserSet").removeAttr("disabled");
    		    },
     		    success : function(data) {
     				waitingDialog.hide();
     				var msg=data.result;
     				bootbox.alert(msg, function () {});
     		   },
     		    error : function(data) {
     				bootbox.alert("服务器发生错误,加载数据发生异常!", function () {});
     		   }
     		});
     	});
    
    
    
    
    
    

    后台json转为对象数组,在转换为集合

        @RequestMapping ("/savaUserGenPrivacySet")
        @ResponseBody
        public String savaUserGenPrivacySet (HttpServletResponse response, HttpServletRequest request)
        {
            try
            {
                request.setCharacterEncoding ("utf-8");
                response.setCharacterEncoding ("utf-8");
            }
            catch (UnsupportedEncodingException e)
            {
                _logger.error (e.getMessage ());
            }
            // 返回数据的容器
            Map <String, Object> resultMap = new HashMap <String, Object> ();
            Long userid = Long.parseLong (request.getParameter ("userid"));
            UserGenPrivacy userGenPrivacy = new UserGenPrivacy ();
            userGenPrivacy.setUserid (userid);
            String jsonArrStr = request.getParameter ("JSONArrStr");//接收到数据字符串
            JSONArray arr = JSONArray.fromObject (jsonArrStr);//将其解析为JSON数组
    	//将json数组转为list集合,注意这里的对象属性要和你前台建的对象属性一致  
            List <UserGenPrivacy> userGenPrivacys = JSONArray.toList (arr, new UserGenPrivacy (), new JsonConfig ());  
    	boolean isOk = _privacyProtectService.savaUserGenPrivacySet (userGenPrivacy, userGenPrivacys);
            String msg = "";
            if (isOk)
            {
                msg = "设置保存成功!";
            }
            else
            {
                msg = "设置保存失败!";
            }
            resultMap.put ("result", msg);
            JsonConfig config = new JsonConfig ();
            config.registerJsonValueProcessor (Date.class, new JsonDateValueProcessor ("yyyy-MM-dd"));
            return JSONObject.fromObject (resultMap, config).toString ();
        }
    
    
    
    

    页面效果(具体页面)



    记:

    由于下面的选项是自动生成的就不贴html代码了,而且这也不是重点,就展示一下大致结构,看的了节点操作就好了;
    <li>
    
            <h2 class="set_title">
            	<span class="picon_yes" name="activityTypeCode" value="1"></span>
            	允许查看门诊过程的相关内容:
            	<span class="set_icon"></span>
            	<span id="mz_flag" class="opcl_icon zhankai"></span>
            </h2>
           	<div class="jmcheckBox" id="mz">
       		<i class="active" name="eventName" id="D008" value="D008">门诊病历</i>
        			<i class="active" name="eventName" id="H152" value="H152">门诊处方</i>
       	</div>
    </li>
    
    
    
    
    因为我这有activityCode的属性和enventCode的属性要组合在一起,所以单独传一串字符串过去再分割字符串不是说不行,但我觉得很傻气,所以就用了这种方式:
    先在前台创建js数组转为json字符串,传到后台,后台再把json解析为JSON数组,最后再转为List集合;
    这时我已经获得了该对象集合,之后只要遍历集合....还不能完成我的操作....我还需要清空以前的用户数据,再将这次数据保存;
    这就涉及到事物控制了,这时我下一次笔记的内容了.

    展开全文
  • C语言中的字符串处理函数

    千次阅读 2019-04-02 17:15:38
    1、strcpy():复制字符串 2、strncpy():复制n个字符串 3、strcat():连接字符串 4、strncat():连接n个字符串 5、strcmp():字符串比大小 6、strlen():字符串长度 7、strset():字符串重置 9、memset():...

    1、strcpy():复制字符串(不安全)

    2、strncpy():复制n个字符串(安全)

    3、strcat():连接字符串(不安全)

    4、strncat():连接n个字符串(安全)

    5、strcmp():字符串比较,C语言中字符串比较不能用=

    6、strlen():字符串长度

    7、strset():字符串重置

    9、memset():内存重置

    10、memcpy():内存复制(不安全)

    11、memmove():内存复制(安全) 

    12、strstr():字符串中查询字符串函数,若找到返回位置,否则返回Null    

    13、strchr():字符串中查询字符的函数,若找到返回位置,否则返回Null 

    14、strtok():分解字符串为一组字符串,使用方法如下


    1、strcpy():复制字符串(不安全)

    • 原型:char *strcpy(char *dest, const char *src);
    • 功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。
    • 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
    • 返回:指向dest的指针。

        注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。因此会导致dest栈空间溢出以致产生崩溃异常。当达到最大尺寸时,它只是停止复制字符。

    char* myStrcpy(char* pre, const char* next)
    {
        char out = pre;
        if (pre == nullptr || next == nullptr)  //空指针直接返回
        {
            return nullptr;
        }
        if (pre == next)                       // 两者相等也无需拷贝了
            return pre;
    
        while ((*pre++ = *next++) != '\0');    // 依次赋值给主字符数组
        return out;
    }

        上面程序实现了strcpy的程序,实现很简单依次赋值给朱字符数组即可,当遇到next指向字符串结束字符’\0’后,完成赋值并且停止赋值。这样新赋值的’\0’就成了字符数组表示的字符串结尾符,哪怕主字符串pre比next长也会戛然而止。字符串判断不管字符数组存了啥,它只认到’\0’前的数是它的主体核心部分。strcpy没有检查长度会溢出,推荐使用strncpy

    2、strncpy():复制n个字符串(安全)

    • 原型:char * strncpy(char*dest, char *src, size_t n);
    • 功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),
    • 返回:指向dest的指针。

        说明:如果n > dest串长度,dest栈空间溢出。否则:
      1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
          如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。
          如果n = src串长度,与strcpy一致。
          如果n = dest串长度,[0,src串长度]处存放src字串,(src串长度, dest串长度]处存放NULL。
      2)src串长度>dest串长度
          如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。

    char *strncpy(char *strDest , const char *strSrc , int n)
    {
    	assert((strDest != NULL) && (strSrc != NULL));
    	char *address = strDest;
    	while(n-- > 0)
    		*strDest++ = *strSrc++;
    	return address;
    }

    3、strcat():连接字符串(不安全)

    • 函数原型:char* strcat(char* des, char* src)
    • 函数功能:把src所指向的字符添加到dest结尾处(覆盖原dest结尾处的'\0'),并添加新的'\0'。
    • 说明:des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
    • 返回值:指向des的指针

        strcat函数常见的错误就是数组越界,即两个字符串连接后,长度超过第一个字符串数组定义的长度,导致越界。

    char* myStrcat(char* pre, const char* next)
    {
        if (pre == nullptr || next == nullptr) // 如果有一个为空指针,直接返回pre
            return pre;
        char* tmp_ptr = pre + strlen(pre); //strlen计算字符数,需要包含都文件string.h,当然也可以自己实现
        while ( (*tmp_ptr++ = *next++) != '\0'); // 依次接着赋值
        return pre;
    }
    

    由于strcat也容易造成缓冲区溢出,因此推荐使用strncat.

    4、strncat():连接n个字符串(安全)

        strncat把src所指向的字符的前n个字符添加到dest结尾处(覆盖原dest结尾处的'\0'),并添加新的'\0'。src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的前n个字符串,返回指向dest的指针。

    char *strncat(char *dest,const char *str,int n)
    {
    	assert((dest!=NULL)&&(str!=NULL));
    	char *cp=dest; 
    	while(*cp!='\0') ++cp;
     
    	while(n&&(*cp++=*str++)!='\0')
    	{
    		--n;
    	} 
    	return dest;
    }
    
    

        由于这四个函数都可能造成缓冲区溢出,在VS2015中已经禁用这几个函数。

    5、strcmp():字符串比较,C语言中字符串比较不能用=

         strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式为:int strcmp(const char* str1, const char* str2)。其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定:
        ① str1小于str2,返回负值或者-1(VC返回-1);                  
        ② str1等于str2,返回0;
        ③ str1大于str2,返回正值或者1(VC返回1);
        strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着 比较第二个字符然后第三个字符等等。无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。代码实现如下(参考):

    int strcmp(const char* str1, const char* str2)
    {
    	int ret = 0;
    	while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1){
    		str1++;
    		str2++
    	} 
    	if (ret < 0){
    		return -1;
    	}
    	else if(ret > 0){
    		return 1;
    	}
    	return 0;
    }

    6、strlen():字符串长度

      strlen()用于计算字符数组长度,到字符串结束符’\0’即停止。如:

    char nzArr[] = "abcdef";
    int nLen = strlen(nzArr);    //结果为6,并不是100,和分配数组内存大小无关,不包含'/0'
    int nLen = sizeof(nzArr);    //结果为7,包括'/0'

    7、strset():字符串重置

       strset()用于设定字符数组全为某一字符,如果存在‘\0’结束符,遇结束符停止赋值。

    char nzArr[100]="abcd";
    strset(nzArr,'g');  //nzArr结果为“gggg”,如果未初始化,则100个空间都为'g'

    9、memset():内存重置

     memset()与strset()类似,赋值字符数组指定字符,但可以指定个数。

    char nzArr[100]="abcd";
    memset(nzArr,'g',sizeof(nzArr));  //nzArr中全为g,该函数是空间操作,不遇'\0'停止,输出g后会出现乱码

    10、memcpy():内存复制(不安全)

        memcpy()由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。 

    • 函数原型为:void *memcpy(void*dest, const void *src, size_t n);
    • 函数返回一个指向dest的指针。

        函数实现:

    void* memcpy(void* dest, const void* src, size_t n)
    {
        char*      d = (char*) dest;
        const char*  s = (const char*) src;
        while(n-–)
           *d++ = *s++;
        return dest;
    }

        strcpy和memcpy主要有以下3方面的区别。

    • 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
    • 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
    • 用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
    #include<stdio.h>
    #include<string.h>
    int main(){
      char*s="Golden Global View";
      chard[20];
      clrscr();
      memcpy(d,s,strlen(s));
      d[strlen(s)]='\0';      //因为从d[0]开始复制,总长度为strlen(s),d[strlen(s)]置为结束符
      printf("%s",d);
      getchar();
      return0;
    }
    输出结果:GoldenGlobal View

    11、memmove():内存复制(安全) 

        memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。memmove的处理措施:

    • (1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
    • (2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝
    • (3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝
    • 函数原型:void* memmove(void* dest, const void* src, size_t n)
    • 返回值:函数返回一个指向dest的指针。

        函数实现:

    void* memmove(void* dest, const void* src, size_t n)
    {
        char*     d  = (char*) dest;
        const char*  s = (const char*) src;
      
        if (s>d)
        {
             // start at beginning of s
             while (n--)
                *d++ = *s++;
        }
        else if (s<d)
        {
            // start at end of s
            d = d+n-1;
            s = s+n-1;
      
            while (n--)
               *d-- = *s--;
        }
        return dest;
    }

    12、strstr():字符串中查询字符串函数,若找到返回位置,否则返回Null    

    char *strchr(const char *s, int c)
    {
        if(s == NULL)
        {
            return NULL;
        }
        while(*s != '\0')
        {
            if(*s == (char)c )
            {
                return (char *)s;
            }
            s++;
        }
        return NULL;
    }
    

    13、strchr():字符串中查询字符的函数,若找到返回位置,否则返回Null 

    char *strstr(char*str, char *subStr)
    {
        while (*str != '\0') {
           char *p = str;
           char *q = subStr;
           char *res = NULL;
           if (*p == *q) {
               res = p;
               while (*q != '\0' && *p == *q){
                   p++;
                   q++;
               }
               if (*q =='\0')
                   return res;
           }
           str++;
        }
    }
    
    char nzArr[10] = "ababcde";
    char nzBuf[10] = "abc";
    char* nzCount  = (char*)malloc(sizeof(char)*10);
    char* nzCount1 = (char*)malloc(sizeof(char)*10);//结果分配空间
    
    memset(nzCount, 0, sizeof(nzCount));   //赋初值
    memset(nzCount1, 0, sizeof(nzCount1)); //防止未匹配到指定字符或字符数组,而成为野指针
    nzCount = strstr(nzArr, nzBuf);        //返回为'abcde'
    nzCount1 = strstr(nzArr, 'c');         //返回为'cc'

        strstr()和strchr()都是查找第二个参数第一次出现在第一个字符数组的位置,前者是查找字符数组,而后者是字符。但是注意返回,返回的是参数出现的地址,需要赋给char*指针来存储,而不是一个索引。 

    14、strtok():分解字符串为一组字符串,使用方法如下:

    #include <string.h>
    #include <stdio.h> 
    int main () 
    {
       char str[80] = "This is - www.runoob.com - website";
       const char s[2] = "-";
       char *token;
       token = strtok(str, s);   
       while( token != NULL ) 
       {
          printf( "%s\n", token );    
          token = strtok(NULL, s);
       }   
       return(0);
    }
    

    参考:https://blog.csdn.net/FX677588/article/details/76702319

              https://blog.csdn.net/lanzhihui_10086/article/details/39828901

              https://blog.csdn.net/wgenek/article/details/7257435

             https://blog.csdn.net/fx677588/article/details/53102634

             https://www.cnblogs.com/kekec/archive/2011/07/22/2114107.html

    展开全文
  • shell截取字符串

    千次阅读 2012-03-20 13:39:09
    以上命令定义了一个名为 "myvar" 的环境变量,并包含字符串 "This is my environment variable!"。以上有几点注意事项:第一,在等号 "=" 的两边没有空格,任何空格将导致错误。第二个件要注意的事是:虽然在定义...
    环境变量
    在 bash 中定义环境变量的标准方法是:
    $ myvar='This is my environment variable!'
    以上命令定义了一个名为 "myvar" 的环境变量,并包含
    字符串 "This is my environment variable!"。以上有几点注意事项:第一,在等号 "=" 的两边没有空格,任何空格将导致错误。第二个件要注意的事是:虽然在定义一个字时能够省略引号,但是当定义的环境变量值多于一个字时(包含空格或制表 键),引号是必须的。第三,虽然通常能够用双引号来替代单引号,但在上例中,这样做会导致错误。因为使用单引号禁用了称为扩展的 bash 特性,其中,特别字符和字符系列由值替换。例如,"!" 字符是历史扩展字符,bash 通常将其替换为前面输入的命令。尽管这个类似于宏的功能很便利,但我们现在只想在环境变量后面加上一个简单的感叹号,而不是宏。
    另一个例子
    $ echo foo$myvarbar
    bash会困惑,到底扩展$m、$my、$myvar、$myvarbar...在这种情况下要用显式的花括号将他括起。
    $ echo foo${myvar}bar
    一定要记住:当环境变量没有用空白(空格或制表键)和周围文本分开时,要使用更明确的花括号形式。
    当一个环境变量被导出时,他能够自动地由以后运行的任何脚本或可执行程式环境使用。
    shell脚本能够使用shell的内置环境变量支持“到达”环境变量,而C程式能够使用getenv()函数调用。如下C代码示例:
    #include
    #include
    int main(void) {
       char *myenvvar=getenv("myvar");
       printf("The myvar environment variable is %s ",myenvvar);
    }
    直接执行程式,结果为:
    The myvar environment variable is (null)
    在export myvar后,程式执行结果为:
    The myvar environment variable is This is my environment variable!
    使用unset除去环境变量后,程式执行结果为:
    The myvar environment variable is (null)
    另外,也能够在一行定义并到处环境变量,如:
    export myvar=abc
    截断字符串概述
    截断字符串是将初始字符串截断成较小的单独块,他是一般 shell 脚本每天执行的任务之一。
    $ basename /usr/local/share/doc/foo/foo.txt
    foo.txt
    Basename是个截断字符串的极简便工具。他的相关命令dirname返回basename丢弃的“另”一个部分路径。
    $ dirname /usr/local/share/doc/foo/foo.txt
    /usr/local/share/doc/foo
    命令替换
    如何创建一个包含可执行命令结果的环境变量,能够通过如下方法:
    $ MYDIR=`dirname /usr/local/share/doc/foo/foo.txt`
    $ echo $MYDIR
    /usr/local/share/doc/foo
    以上程式需要注意的是:在第一行,将要执行的命令以 反引号 括起。不是标准的单引号,而是键盘中通常位于Tab键之上的单引号。(注:单引号中的内容将会被强制显示,也就是说单引号中的命令不会被替换)
    除了反引号``外,还能够使用$()来完成同样操作
    $ MYDIR=$(dirname /usr/local/share/doc/foo/foo.txt)
    $ echo $MYDIR
    /usr/local/share/doc/foo
    使用命令替换能够将任何命令或命令管道放在``或$()之间,并将其分配给环境变量。
    象专业人员那样截断字符串
    有时候我们需要执行更高级的字符串“截断”,如下例子:
    $ MYVAR=foodforthought.jpg
    $ echo ${MYVAR##*fo}
    rthought.jpg
    $ echo ${MYVAR#*fo}
    odforthought.jpg
    第一个echo,bash取得MYVAR,找到从字符串"foodforthought.jpg" 开始处开始、且匹配通配符 "*fo" 的 最长 子字符串,然后将其从字符串的开始处截去。
    第二个echo,bash取得MYVAR,找到从字符串"foodforthought.jpg" 开始处开始、且匹配通配符 "*fo" 的 最短 子字符串,然后将其从字符串的开始处截去。
    记忆方法:当搜索最长匹配时,使用 ##(因为 ## 比 # 长)。当搜索最短匹配时,使用 #。如何记住使用"#"字符来从字符串开始部分出去?在美国键盘上,shift-4 是 "$",他是 bash 变量扩展字符。在键盘上,紧靠 "$" 左边的是 "#"。这样,能够看到:"#" 位于 "$" 的“开始处”,因此(根据我们的记忆法),"#" 从字符串的开始处除去字符。同理,使用"%"来从尾部截去字符串:
    $ MYFOO="chickensoup.tar.gz"
    $ echo ${MYFOO%%.*}
    chickensoup
    $ echo ${MYFOO%.*}
    chickensoup.tar
    假如忘记了应该使用"#" 还是 "%",则看一下键盘上的 3、4 和 5 键,然后猜出来。
    更有另一种形式的变量扩展,来选择特定子字符串。
    $ EXCLAIM=cowabunga
    $ echo ${EXCLAIM:0:3} //表示从下标0开始取3个
    cow
    $ echo ${EXCLAIM:3:7} //表示从下标3开始取7个
    abunga
    请注意命令替换$()和截断字符串${}的区别
    应用字符串截断
    下面是个简单的shell脚本,这个脚本接受一个文档作为自变量,然后打印:该文档是否是个tar文档。
    #!/bin/bash
    if [ "${1##*.}" = "tar" ]
    then
    echo This appears to be a tarball.
    else
    echo At first glance, this does not appear to be a tarball.
    fi
    看一下上例使用的"if"语句。语句中使用了一个布尔表达式。在bash中,"="比较运算符检查字符串是否相等。在bash中,任何布尔表达式都用方括号括起。
    ($1是传给脚本的第一个命令行自变量,$2是第二个,以此类推。)
    If语句
    if [ condition ]
    then
    action
    fi
    只有当condition为真时,该语句才执行操作,否则不执行操作,并继续执行"fi"之后的语句。
    if [ condition ]
    then
    action
    elif [ condition2 ]
    then
    action2
    .
    .
    .
    elif [ condition3 ]
    then
    else
    actionx
    fi
    以上"elif"形式将连续测试每个条件,并执行符合第一个 真 条件的操作。假如没有条件为真,则将执行"else"操作,假如有一个条件为真,则继续执行整个"if,elif,else"语句之后的行。
    Bash编程实例 二
    在前一篇 bash 的介绍性文章中,我们了解了脚本语言的一些基本元素和使用 bash 的原因。在本文(即第二部分)中,将继续前一篇的内容,并讲解条件 (if-then) 语句、循环和更多的 bash 基本结构。
                                                                                                          Bash编程实例
                                                                                                             第二部分
    接收自变量
    看一下如下的例子:
    #! /bin/bash
    echo name of script. is $ 0
    echo first argument is $ 1
    echo second argument is $ 2
    echo seventeenth argument is $ 17
    echo number of arguments is $#
    Bash中将" $ 0 "扩展成从命令行调用的脚本名称,"$#"被扩展成传递给脚本的自变量数目。(请注意$ 和 0是连起来的)
    在Bash编程中有时候需要一次引用任何命令行自变量,针对这种用途,bash实现了变量"$@",他被扩展成任何用空格分开的命令行参数。
    Bash编程结构
    在各种编程语言中出现的"if"语句和"for"循环等标准编程结构,Bash有自己的版本。以下几节,将介绍几种bash结构,并演示这些结构及其和其他编程语言中结构的差异。
    方便的条件语句
    在C语言中,要比较特定文档是否比另一个文档新必须使用两个stat()调用和两个stat结构来进行手工比较。而在bash中,因为其内置了标准文档比 较运算符,因此,确定"/tmp/myfile 是否可读"和查看"$myvar 是否大于 4"相同容易。 看下面的例子:
    if [ -z "$myvar" ]
    then
    echo "myvar is not defined"
    fi
    上例表示假如$myvar没有定义(即$myvar为0),则echo ".........."
    bash中可使用的比较运算符如下:
    运算符   描述   示例  
    文档比较运算符  
    -e filename   假如 filename存在,则为真   [ -e /var/log/syslog ]
    -d filename   假如 filename为目录,则为真   [ -d /tmp/mydir ]
    -f filename   假如 filename为常规文档,则为真   [ -f /usr/bin/grep ]
    -L filename   假如 filename为符号链接,则为真   [ -L /usr/bin/grep ]
    -r filename   假如 filename可读,则为真   [ -r /var/log/syslog ]
    -w filename   假如 filename可写,则为真   [ -w /var/mytmp.txt ]
    -x filename   假如 filename可执行,则为真   [ -L /usr/bin/grep ]
    filename1-nt filename2   假如 filename1比 filename2新,则为真   [ /tmp/install/etc/services -nt /etc/services ]
    filename1-ot filename2   假如 filename1比 filename2旧,则为真   [ /boot/bzImage -ot arch/i386/boot/bzImage ]
    字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)  
    -z string   假如 string长度为零,则为真   [ -z "$myvar" ]
    -n string   假如 string长度非零,则为真   [ -n "$myvar" ]
    string1= string2   假如 string1和 string2相同,则为真   [ "$myvar" = "one two three" ]
    string1!= string2   假如 string1和 string2不同,则为真   [ "$myvar" != "one two three" ]
    算术比较运算符  
    num1-eq num2   等于 [ 3 -eq $mynum ]
    num1-ne num2   不等于 [ 3 -ne $mynum ]
    num1-lt num2   小于 [ 3 -lt $mynum ]
    num1-le num2   小于或等于 [ 3 -le $mynum ]
    num1-gt num2   大于 [ 3 -gt $mynum ]
    num1-ge num2   大于或等于 [ 3 -ge $mynum ]
    有时,有几种不同方法来进行特定比较。如下:
    if [ "$myvar" -eq 3 ]
    then
        echo "myvar equals 3"
    fi

    if [ "$myvar" = "3" ]
    then
        echo "myvar equals 3"
    fi
    上面两个比较执行相同的功能,但是第一个使用算术比较运算符,而第二个使用字符串比较运算符。
    字符串比较说明
    大多数时候,虽然能够不使用括起字符串和字符串变量的双引号,但这并不是好主意。因为假如环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。这里有一个错误的比较示例:
    if [ $myvar = "foo bar oni" ]
    then
        echo "yes"
    fi

    在上例中,假如 myvar 等于 "foo",则代码将按预想工作,不进行打印。但是,假如 myvar 等于 "foo bar oni",则代码将因以下错误失败:
    [: too many arguments

    在这种情况下,"$myvar"(等于 "foo bar oni")中的空格迷惑了 bash。bash 扩展 "$myvar" 之后,代码如下:
    [ foo bar ni = "foo bar oni" ]
    因为环境变量没放在双引号中,所以 bash 认为方括号中的自变量过多。能够用双引号将字符串自变量括起来消除该问题。请记住,假如养成将任何字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。"foo bar oni" 比较 应该写成:
    if [ "$myvar" = "foo bar oni" ]
    then
        echo "yes"
    fi
    在调用环境变量的时候最好使用""将环境变量括起来。(注意:假如想引用环境变量的值,则不要使用单引号,因为单引号会 禁用变量(和历史)扩展。如在上例中会只接受空格以前的字符)
    循环结构:"for"
    OK,开始我们的for循环了:)   先看一个简单的例子:
    #! /bin/bash

    for x in one two three four
    do
        echo number $x
    done

    输出:
    number one
    number two
    number three
    number four
    这个例子中"for x"部分定义了一个名为"$x"的新环境变量(也称为循环控制变量),他的值被依次配置为"one"、"two"、"three"和"four"。每一次 赋值之后,执行一次循环体("do"和"done"之间的代码)。在循环体内,象其他环境变量相同,使用标准的变量扩展语法来引用循环控制变量"$x"。 还要注意,"for"循环总是接受"in"语句之后的某种类型的字列表。在这个例子中,指定了四个英语字母,但是字列表也能够引用磁盘上的文档,甚至文档通配符。再看一个使用标准shell通配符的例子:
    #! /bin/bash

    for myfile in /etc/r*
    do
        if [ -d "$myfile" ]
    then
       echo "$myfile (dir)"
    else
       echo "$myfile"
    fi
    done

    输出:

    /etc/rc.d (dir)
    /etc/resolv.conf
    /etc/resolv.conf~
    /etc/rpc          

    以上代码列出在 /etc 中每个以 "r" 开头的文档。要做到这点,bash 在执行循环之前首先取得通配符 /etc/r*,然后扩展他,用字符串 /etc/rc.d /etc/resolv.conf /etc/resolv.conf~ /etc/rpc 替换。(也即循环语句被替换成for myfile in /etc/rc.d /etc/resolv.conf /etc/resolv.conf~ /etc/rpc )一旦进入循环,根据 myfile 是否为目录,"-d" 条件运算符用来执行两个不同操作。假如是目录,则将 "(dir)" 附加到输出行。
    还能够在字列表中使用多个通配符、甚至是环境变量:

    for x in /etc/r--? /var/lo* /home/drobbins/mystuff/* /tmp/${MYPATH}/*
    do
        cp $x /mnt/mydir
    done

    虽然任何通配符扩展示例使用了 绝对路径,但也能够使用相对路径,如下所示:

    for x in ../* mystuff/*
    do
        echo $x is a silly file
    done

    再看个例子:
    for x in /var/log/*
    do
        echo `basename $x` is a file living in /var/log
    done
    看看如何使用"$@"的:
    #!/usr/bin/env bash

    for thing in "$@"
    do
        echo you typed ${thing}.
    done

    输出:
    $ allargs hello there you silly
    you typed hello.
    you typed there.
    you typed you.
    you typed silly.
    Shell 算术
    在学习另一类型的循环结构之前,最好先熟悉如何执行 shell 算术。能够使用 shell 结构来执行简单的整数运算。只需将特定的算术表达式用 "$((" 和 "))" 括起,bash 就能够计算表达式。这里有一些例子:
    $ echo $(( 100 / 3 ))
    33
    $ myvar="56"
    $ echo $(( $myvar + 12 ))
    68
    $ echo $(( $myvar - $myvar ))
    0 $ myvar=$(( $myvar + 1 ))
    $ echo $myvar
    57

    更多的循环结构:"while" 和 "until"
    只要特定条件为真,"while" 语句就会执行,其格式如下:
    while [ condition ]
    do
        statements
    done

    通常使用 "While" 语句来循环一定次数,比如,下例将循环 10 次:
    myvar=0
    while [ $myvar -ne 10 ]
    do
        echo $myvar
        myvar=$(( $myvar + 1 ))
    done
    能够看到,上例使用了算术表达式来使条件最终为假,并导致循环终止。
    "Until" 语句提供了和 "while" 语句相反的功能:只要特定条件为 假 ,他们就重复。下面是个和前面的 "while" 循环具备同等功能的 "until" 循环:
    myvar=0
    until [ $myvar -eq 10 ]
    do
        echo $myvar
        myvar=$(( $myvar + 1 ))
    done

    Case 语句
    Case 语句是另一种便利的条件结构。这里有一个示例片段:

    case "${x##*.}" in
       gz)
             gzunpack ${SROOT}/${x}
             ;;
       bz2)
             bz2unpack ${SROOT}/${x}
             ;;
       *)
             echo "Archive format not recognized."
             exit
             ;;
    esac                                     
    在上例中,bash 首先扩展 "${x##*.}"。在代码中,"$x" 是文档的名称,"${x##.*}" 除去文档中最后句点后文本之外的任何文本。然后,bash 将产生的字符串和 ")" 左边列出的值做比较。在本例中,"${x##.*}" 先和 "gz" 比较,然后是 "bz2",最后是 "*"。假如 "${x##.*}" 和这些字符串或模式中的任何一个匹配,则执行紧接 ")" 之后的行,直到 ";;" 为止,然后 bash 继续执行结束符 "esac" 之后的行。假如不匹配任何模式或字符串,则不执行任何代码行,在这个特别的代码片段中,至少要执行一个代码块,因为任何不和 "gz" 或 "bz2" 匹配的字符串都将和 "*" 模式匹配。
    函数和名称空间
    在bash中也能够定义函数。函数甚至能够使用和脚本接受命令行自变量类似的方式来接受自变量。
    tarview() {
        echo -n "Displaying contents of $1 "
        if [ ${1##*.} = tar ]
    then
          echo "(uncompressed tar)"
          tar tvf $1
        elif [ ${1##*.} = gz ]
    then
          echo "(gzip-compressed tar)"
          tar tzvf $1
        elif [ ${1##*.} = bz2 ]
    then
          echo "(bzip2-compressed tar)"
          cat $1 | bzip2 -d | tar tvf -
    fi
    }
    (echo -n 不换行)
    上面定义了一个名为 "tarview" 的函数,他接收一个自变量,即某种类型的 tar 文档。在执行该函数时,他确定自变量是哪种 tar 文档类型(未压缩的、gzip 压缩的或 bzip2 压缩的),打印一行信息性消息,然后显示 tar 文档的内容。
    $ tarview shorten.tar.gz
    Displaying contents of shorten.tar.gz (gzip-compressed tar)
    drwxr-xr-x ajr/abbot       0 1999-02-27 16:17 shorten-2.3a/
    -rw-r--r-- ajr/abbot    1143 1997-09-04 04:06 shorten-2.3a/Makefile
    -rw-r--r-- ajr/abbot    1199 1996-02-04 12:24 shorten-2.3a/INSTALL
    -rw-r--r-- ajr/abbot    839 1996-05-29 00:19 shorten-2.3a/LICENSE
    ....
    名称空间
    经常需要在函数中创建环境变量。虽然有可能,但是更有一个
    技术细节应该了解。在大多数编译语言(如 C)中,当在函数内部创建变量时,变量被放置在单独的局部名称空间中。因此,假如在 C 中定义一个名为 myfunction 的函数,并在该函数中定义一个名为 "x" 的自变量,则任何名为 "x" 的全局变量(函数之外的变量)将不受他的印象,从而消除了负作用。
    在 C 中是这样,但在 bash 中却不是。在 bash 中,每当在函数内部创建环境变量,就将其添加到 全局名称空间。这意味着,该变量将重写函数之外的全局变量,并在函数退出之后继续存在:
    #!/usr/bin/env bash

    myvar="hello"

    myfunc() {

        myvar="one two three"
        for x in $myvar
        do
          echo $x
        done
    }
    myfunc
    echo $myvar $x

    运行此脚本时,他将输出 "one two three three",这显示了在函数中定义的 "$myvar" 如何影响全局变量 "$myvar",连同循环控制变量 "$x" 如何在函数退出之后继续存在(假如 "$x" 全局变量存在,也将受到影响)。
    在这个简单的例子中,很容易找到该错误,并通过使用其他变量名来改正错误。但这不是正确的方法,
    解决此问题的最好方法是通过使用 "local" 命令,在一开始就预防影响全局变量的可能性。当使用 "local" 在函数内部创建变量时,将把他们放在 局部名称空间中,并且不会影响任何全局变量。这里演示了如何实现上述代码,以便不重写全局变量:

    #!/usr/bin/env bash

    myvar="hello"

    myfunc() {
        local x
        local myvar="one two three"
        for x in $myvar
        do
          echo $x
        done
    }
    myfunc
    echo $myvar $x

    此函数将输出 "hello" -- 不重写全局变量 "$myvar","$x" 在 myfunc 之外不继续存在。在函数的第一行,我们创建了以后要使用的局部变量 x,而在第二个例子 (local myvar="one two three"") 中,我们创建了局部变量 myvar, 同时 为其赋值。在将循环控制变量定义为局部变量时,使用第一种形式很方便,因为不允许说:"for local x in $myvar"。此函数不影响任何全局变量,鼓励您用这种方式设计任何的函数。只有在明确希望要修改全局变量时,才 不应该使用 "local"。创建局部环境变量时最好使用"local"。

    展开全文
  • Problem E: 编写函数:递归的字符串回文 (Append Code) Time Limit: 1 SecMemory Limit: 16 MB Submit: 838Solved: 235 [Submit][Status][Web Board] Description 输入一个字符串s,判断是否为回文。回文是指...
  • windows系统的很多组策略配置,都可以通过修改注册表完成。 为了自动化快速做组策略配置,需要通过命令行方式修改注册表来达到这一目的。... 其中通过命令行方式修改多字符串值类型的注册表有点难,本文以此为例。
  • UE4入门-常见基本数据类型-字符串

    千次阅读 2017-11-07 17:39:34
    字符串FNameFName 通过一个轻型系统使用字符串。在此系统中,特定字符串即使会被重复使用,在数据表中也只存储一次。FNames 不区分大小写。它们为不可变,无法被操作。FNames 的存储系统和静态特性决定了通过键进行 ...
  • 4.java字符串和输入输出

    千次阅读 2018-11-09 01:50:36
    目录 1.String类 2.StringBuilder类 3.StringBuffer类 4.Java:String、StringBuffer ...从概念上讲,java字符串就是Unicode字符序列。​​​​ String类提供处理Unicode代码点(即字符)的方法,以及用于处理...
  • 本章将学到许多操作数据的方法,它们大多与下面这两种内置的Python数据类型有关。 字符串 Unicode字符组成的序列,用于存储文本数据。...Python3中的字符串是Unicode字符串而不是字节数组(一个字符一...
  • 数据库连接字符串

    千次阅读 2010-03-15 09:06:00
    注意 :在字符串中的引号"需要根据你使用的语言转义一些.举例如下 c#, c++ /" VB6, VBScript  "" xml (web.config etc) " 或者用单引号’。 "HDR=Yes;" 这个参数说明第一行是列名,而不是数据....
  • 字符串 FName FName 通过一个轻型系统使用字符串。在此系统中,特定字符串即使会被重复使用,在数据表中也只存储一次。FNames 不区分大小写。它们为不可变,无法被操作。FNames 的存储系统和静态特性决定了通过键...
  • Qt TCP协议 传输简单字符串实例

    千次阅读 2016-08-22 10:06:49
    Qt TCP协议 传输简单字符串实例是本文要介绍的内容。TCP即Transmission Control Protocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的...
  • 第四章 字符串和格式化输入/输出

    千次阅读 2010-10-12 19:09:00
    1、字符串简介C语言没有字符串类型,而是把它存储在char数组中,字符串以空字符'/0'结束,非打印字符,其ASCII码值为0.
  • Problem E: 编写函数:递归求逆序 (Append Code) Time Limit: 1 Sec Memory Limit: 16 MB Submit: 5583 Solved: 3247 ...将输入的一个字符串s逆序输出。 编写函数recursive()完成程序: 原型:int recursive(); ...
  • 关键点在这里JSON.stringify(mock,null,4).toString()有格式化的作用,v-model以后取到的是字符串,所有得转成数组结构。 &amp;amp;lt;div id=&amp;quot;app&amp;quot;&amp;amp;gt; &amp;amp...
  • C# System.Speech语音播报朗读字符串

    千次阅读 2019-03-31 10:54:44
    播音员在不同的电脑上可能会预装不同的播音员,如果播音员字符串错误,会出现如下异常: System.ArgumentException:“不能设置语音。未安装匹配的语音,或语音被禁用。” 这时候就可以检索PC上安装的语音包来...
  • 在我们的HelloWord例子当中,我们并没有传入任何参数给我们的java层print方法,native方法也并没有返回任何数据而是void,本地方法只是简单的打印一个字符串,然后就返回了。实际开发中我们都需要传入参数,返回参数...
  • 索引数组(索引值为数字,以0开始)和关联数组(以字符串作为索引值) 数组的赋值方式有哪两种? 数组的声明方式主要有两种。 1.通过array()函数声明数组; 可以通过key=>value的方式分别定义索引和值,也可以...
  • SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置:使用用sa账户登录SQL Server Management Studio(简写SSMS) 如果...
  • 将输入的一个字符串s拷贝输出。 ----------------------------------------------------------------------------- 编写一个函数str_cpy()求一个串的拷贝: 原型:char * str_cpy(char * t, char * s); ...
  • [转]web.config保护连接字符串及其它设置信息 <!--...
  • 本文英文原版及代码下载:http://www.asp.net/learn/data-access/tutorial-73-cs.aspxScott Mitchell 的ASP.NET 2.0数据教程之73:保护连接字符串及其它设置信息导言:ASP.NET应用程序的设置信息通常都存储在一个名...
  • pycharm禁用pytest

    2020-09-08 20:14:58
    run的快捷键是alt+shift+f10 比如可以设置快捷键为Ctrl+f1 将代码中的test替换掉 ...上面的输入框输入test,下面的输入框输入你想要替换的字符串,然后按输入框右边的Replace all 就可以完成替换了。 ...
  • 禁用USB存储设备

    千次阅读 2013-01-24 16:59:58
    有软件的人就不说了,USB安全存储专家(以下简称USSE)是一套计算机USB端口屏蔽、USB端口控制、实时监视、实时监控于一体的计算机网络安全控制系统。...这种方法有它的局限性,就是不仅禁用了U盘,同时也禁用了其他的
  • 树莓派3b+串口配置

    万次阅读 多人点赞 2019-06-20 10:10:45
    对比修改前的关系,可以看出serial0和serial1 与 ttyAMA0和ttyS0的映射关系对换完成了,也就是ttyAMA0映射到了引出的GPIO Tx(14) Rx(15) 引脚上。 5、禁用串口的控制台功能 前面的步骤已经交换了硬件串口与mini...
  • 禁用Ping

    千次阅读 2012-08-23 14:47:33
    禁用Ping 一、用高级设置法预防Ping 默认情况下,所有Internet控制消息协议(ICMP)选项均被禁用。如果启用ICMP选项,我们的网络将在 Internet 中是可视的,因而易于受到攻击。 如果要启用ICMP,必须以管理员或...
  • 背景:以启用 / 禁用网卡举例。 系统平台:win2003。 情况描述:机器上装有两块网卡,8136和8139,网卡A使用静态IP,连接内部办公网,网卡B使用DHCP,连接互联网。切换两个网络时,需要先禁用一个网卡,启用另一个...
  • c#TextBox输入框自动提示、自动完成、自动补全功能

    万次阅读 多人点赞 2015-04-26 22:05:03
    此下拉列表填充了一个或多个建议完成字符串。 SuggestAppend 追加 Suggest 和 Append 选项。 None 禁用自动完成 这是默认值。 TextBox.AutoCompleteSource 属性 获取或设置一个值,该值指定用于...
  • intel ME 禁用 研究

    千次阅读 2018-10-18 15:48:40
    Positive Technologies研究团队对英特尔管理引擎(Intel Management Engine,Intel ME)11的内部构造深入研究后,找到了在硬件初始化及主处理器启动后禁用Intel ME的一种方法。在本文中,我们会介绍发现这个未公开...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,985
精华内容 33,594
关键字:

如何禁用完成字符串