精华内容
下载资源
问答
  • js字符串函数

    万次阅读 2019-07-10 15:24:22
    js字符串函数 对于函数型的字符串,我们想要将其转换为一个函数然后执行,有2种常用的方法。 1.eval() eval()具有可以解析表达式的特性,所以可以利用这一特性将字符串解析为一个函数。 let funcStr = "function ...

    js字符串转函数

    对于函数型的字符串,我们想要将其转换为一个函数然后执行,有2种常用的方法。

    1.eval()

    eval()具有可以解析表达式的特性,所以可以利用这一特性将字符串解析为一个函数。

      let funcStr = "function test(value){alert(value)}";
      let test = eval("(false || "+funcStr+")");
      test("函数能够执行");
    

    这里eval实际是解析了表达式(false || function test(value))

    但是需要注意的事eval可以解析任何字符串,这是不安全的,请尽量不要使用。

    2.new Function()

    new Function ([arg1[, arg2[, ...argN]],] functionBody)
    

    new Function()只接受字符串参数,其可选参数为方法的入参,必填参数为方法体内容。

    function add(a, b) {
      retrun a + b;
    }
    //等价于
    var add = new Function ('a', 'b', 'return a + b');
    

    我们可以利用它最后的方法体参数,直接返回一个函数。那么执行这个新的创建函数后得到的就是我们需要的函数。

    let funcStr = "function test(value){alert(value)}";
    let funcTest = new Function('return '+funcStr);
    funcTest()("函数也能够执行")
    

    3.深入理解

    如果是一个完整的函数体,且其中函数体内未包含其他函数,那么可以使用new Functioneval来实现。

    如果函数体内包含函数,那么包含的函数必须和被调用的函数位于同一作用域下。

    如何保证调用函数和调用参数在统一作用域?有2种方案可以采取:

    • 将变量和方法都声明到window对象上,那么任何地方皆可以调用,但是这样存在风险,如果存在和window对象内置属性同名的情况下,将覆盖内置属性的值。
    • 将变量和方法作用域一个实例对象中。

    下面讲解如何用实例限制作用域。

    1. 首先创建一个构造方法,构造方法中声明变量和方法,如果存在动态变量时,可如下操作,将变量放在this对象上,这样在实例中即可通过this.属性名获取。
    2. 定义一个方法,调用字符串函数。
    3. 在方法内绑定this指向,并使用with省略表达式的前缀,例如this._f即可省略为_f;

    let exp = _f("defaultStr")(_f("DFormat")(reportDate,'YYYY-MM-DD'))字符串函数为例。

    其中_f为一个函数,reportDate为一个变量

    如果直接使用eval(exp),会报错_f is not defined,因为默认情况下在严格模式下_f的作用域为undefined。

    此时你可以设置window为作用域,例如:

    //如果只是单纯的一个函数_f("DFormat")(reportDate,'YYYY-MM-DD')
    //那么可与如下设置:
    window._f = resolveFilter
    expStr = `_f("DFormat")(reportDate,'YYYY-MM-DD')`
    window.reportDate = "20191212";
    let a = eval(expStr)
    console.log(a)
    

    将变量和方法绑定到window上,然后进行全局调用

    但是上例是2个方法_f("defaultStr")(_f("DFormat")(reportDate,'YYYY-MM-DD')),函数调用时,立即执行

    _f("DFormat")(reportDate,'YYYY-MM-DD'),返回的结果不是一个函数,导致调用_f("defaultStr")时,_f方法被第二个函数的执行结果覆盖了,不再是一个方法了,所以不能继续执行。

    要解决方法覆盖问题,那么方法就不能被定义为属性,而应该是原型,利用继承的特性解决该问题。

    实例解决方案

    //注册filter
    export const resolveFilter = (id) => {
        if (typeof id !== 'string') {
            return id;
        } else {
            return filters[id]//返回一个函数
        }
    }
    
    //创建实例对象
    export function createExpInstance(paramsEntity) {
        for (let key in paramsEntity) {
            this[key] = paramsEntity[key]
        }
    }
    createExpInstance.prototype._f = resolveFilter;
    createExpInstance.prototype.getValue = function (exp) {
        let code = `return (()=>{with (this) {return ${exp}}})()`;
        try {
            let func = new Function(code);
            let currentFunc = func.bind(this);//绑定函数this指向,严格模式下this为undefined,非严格模式为window
            return currentFunc();
        } catch (err) {
            // console.log(err)
        }
    }
    
    let expInstance = new createExpInstance(paramsEntity);
    let expValue = expInstance.getValue(expStr);
    

    with(this)虽然是个不推荐属性,但是用在这里恰到好处,让我们省略了this的书写,从而直接利用实例属性和方法。

    如果没有with(this),code应为:

    return (()=>{return this._f("defaultStr")(this._f("DFormat")(this.reportDate,'YYYY-MM-DD'))})()
    
    展开全文
  • c++自己定义比较字符串大小的函数

    千次阅读 2018-10-09 21:19:21
    #include “stdafx.h” #include using namespace std; int my_strcmp(char s1[], char s2[]); int main() { char s1[] = “hello world”; char s2[] = “hello abc”;...int flag = my_strcmp(s1, s2);...

    #include “stdafx.h”
    #include
    using namespace std;
    int my_strcmp(char s1[], char s2[]);
    int main()
    {
    char s1[] = “hello world”;
    char s2[] = “hello abc”;
    int flag = my_strcmp(s1, s2);
    if (flag == 0)
    {
    //printf("%s 等于 %s\n", s1, s2);
    cout << s1 << “等于” << s2 << endl;
    }
    else if (flag > 0)
    {
    //printf("%s 大于 %s\n", s1, s2);
    cout << s1 << “大于” << s2 << endl;
    }
    else
    {
    //printf("%s 小于 %s\n", s1, s2);
    cout << s1 << “小于” << s2 << endl;
    }

    return 0;
    

    }
    int my_strcmp(char s1[], char s2[])
    {
    int i = 0;
    while (s1[i] && s2[i] != ‘0’&&s1[i]==s2[i])
    {
    //if (s1[i] == s2[i])
    //{
    i++;
    //}
    /* else if (s1[i] > s2[i])
    {
    return 1;
    }
    else if (s1[i] < s2[i])
    {
    return -1;
    }
    else
    return 0;*/
    }
    return s1[i]-s2[i];
    }

    展开全文
  • 字符串格式化函数引起的崩溃

    万次阅读 2017-12-12 23:11:25
    我们常用的格式化字符串函数有: HRESULT StringCchVPrintf( _Out_ LPTSTR pszDest, _In_ size_t cchDest, _In_ LPCTSTR pszFormat, _In_ va_list argList ); int printf ( const char * format, ... ); ...

    一. 问题描述

    我们常用的格式化字符串函数有:

    HRESULT StringCchVPrintf(
      _Out_ LPTSTR  pszDest,
      _In_  size_t  cchDest,
      _In_  LPCTSTR pszFormat,
      _In_  va_list argList
    );
    
    int printf ( const char * format, ... );
    

    对于如下的调用:

    char buf[100] = {0};
    StringCchVPrintf(buf, 100, "select * from member where name like '%sjj%';");
    

    我们在buf中并不能得到想要的select * from member where name like '%sjj%';字符串,不出意外,%sjj%处的%s会变成乱码。因为函数将%sjj%中的%s当做了字符串格式化串了,而我们又没有给最后一个参数(即可变参数)传值,根据可变参数的原理,默认会根据format参数的地址来取一个地址让%s进行输出。具体计算方式参考va_start宏定义:

    #define va_start _crt_va_start
    #define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
    

    这个地址的内容是未知的,所以就可能出现乱码或崩溃。

    二. 解决方案

    要解决这个问题,我们只需要做到一点,在调用StringCchVPrintf、vsprintf、vswprintf、_vstprintf、printf这样的一系列函数输出固定字符串时,一定不要将固定字符串传入到pszFormat参数,如:

    StringCchVPrintf(szBuf, 512, "我想输出单纯的%s,我是错误的格式示范");  // 错误的
    

    这个时候,单纯的%s中的%s已经不在单纯。
    正确的做法是:

    StringCchVPrintf(szBuf, 512, "%s", "我想输出单纯的%s,我是正确的格式示范"); 
    

    同理,下面的调用方式也是错误的、危险的:

    std::string strInfo = GetInfo();
    printf(strInfo.c_str());
    
    展开全文
  • 理解字符串函数

    千次阅读 2016-04-12 19:48:15
    其他核函数一般定义在欧氏空间上,而字符串函数定义字符串集合上的核函数字符串函数被广泛在文本分类、信息检索等方面。 首先解释下什么字符串函数。与一般核函数一样,字符串函数也需要高维特征...

    前面讲支持向量机的时候,提到了核函数,通过核函数可以实现特征点的非线性转换,从而实现分类。
    字符串核函数也是一种核函数,但它与一般的核函数不同。其他核函数一般定义在欧氏空间上,而字符串核函数是定义在字符串集合上的核函数。字符串核函数被广泛用在文本分类、信息检索等方面。

    首先解释下什么是字符串核函数。与一般核函数一样,字符串核函数也需要高维特征空间。特征空间的维度由映射函数决定,例如映射 ϕ(x1,x2,x3) ,则特征空间维数为三维。字符串核函数的特征空间维数也是由映射函数决定的,但不同的是,特征空间的每一维是用字符串来表示的。例如字母表为{a,b,c}长度大于等于3的字符串集合的特征空间有六维,分别是abc、acb、bac、bca、cab、cba。这样就可以将字符串s,t用长度为3的子串向量来“表示”,当然这里的表示不是说字符串能够用这些子串等价地表示,因为字符串核函数 k(s,t) 定义的是字符串s和t的余弦相似度,它们的子串越多,相似性就越高。

    首先给出字符串核函数的映射函数在每一维上的取值表达式:

    [ϕn(s)]u=uλl(i)

    其中,特征空间是由所有长度为n的子串组成的,维数为 n 维, 是一个有限字符表,如上例长度为3的子串组成的特征空间维数为6,特征空间每一维都对应着一个子串;s表示长度大于等于n的字符串; 0<λ1 是一个衰减参数, l(i) 表示子串u在字符串s中的长度,i是子串的下标序列,例如:
    给定字符串s=“sectionalization”,子串 subU1 =”set”, subU2 =”tion”,则 subU1 下标序列 i=(1,2,4) ,长度 l(i) 为4; subU2 的下标序列 i=(4,5,6,7) ,长度 l(i) 为4。

    举个例子来说明,如下:
    这里写图片描述
    表示的是在字母表 ={f,o,g,b} 中长度为2的子串(部分子串两个字符串均没有,故不列出)组成的特征空间,由上面给出的映射函数每一维取值公式可知,

    ϕ(fog)=(λ2,λ3,λ2,0,0)
    ϕ(fob)=(λ2,0,0,λ3,λ2)

    λ 的指数表示子串在字符串中的长度,系数表示出现次数,如 2λ3 表示出现了两次长度为3的子串u。根据核函数的定义 k(fog,fob)=<ϕ(fog),ϕ(fob)>=2λ4+λ6

    因为字符串核函数 kn(s,t) 定义的是字符串s和t中长度等于n的所有子串组成的特征向量的余弦相似度,所以字符串核函数以前面的核函数定义不同,为映射函数的内积再除以每个串对应的向量范数,如上例最后一个等式 k(fog,fob) 所示。

    展开全文
  • C++ 字符串操作函数

    千次阅读 2017-02-23 17:28:58
    由于字符串使用广泛,C和C++提供了一些字符串函数,包括字符串连接函数strcat,字符串复制函数strcpy,字符串比较函数strcmp,字符串长度函数strlen,在C语言中被定义在string.h中定义。在C++中被定义在cstring和...
  • Oracle 自定义字符串转换数组函数

    千次阅读 2016-12-22 22:12:00
    Oracle 自定义字符串转换数组的函数
  • (C语言)常见字符函数和字符串函数

    万次阅读 多人点赞 2018-07-23 10:49:50
    字符串通常放在常量字符串中或者字符数组中,字符串常量适用于那些对她不做修改的字符串函数。 string.h这个头文件里声明的函数原型也全是针对char数组的种种操作。 直到C++中才出现了string这个类 这篇文章就...
  • c语言中关于字符串的相关函数

    千次阅读 2018-05-17 17:13:10
    strcmp函数实际上是对字符的ASCII码进行比较 , 其中str1和str2可以是字符串常量或者字符串变量,返回值为整形,所以区分大小写。① str1&lt;str2,返回负值或者-1; ② str1=str2,返回0...
  • 字符串操作函数和内存函数详解

    千次阅读 多人点赞 2021-02-13 11:45:13
    字符串操作函数的实现 1.strlen函数 函数功能: 计算指定的字符串string的长度。 应用 int main() { char* str = "abcdef";...int my_strlen(const char*str)//字符串长度是不变的,const修饰 { a
  • 字符函数和字符串函数一、求字符串长度strlen C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数....
  • 字符串中常用函数

    千次阅读 2018-08-09 13:56:05
    strlen():用于统计字符串的长度。  strlen和sizeof之间的区别:  a、strlen()是一个函数,sizeof是一个运算符,这是本质上的区别​   b、strlen()测量的是字符的是实际长度,以'\0'结束;如果只定义没有给他...
  • 输入一个字符串,编写函数统计该字符串中的字母、数字和其他字符的个数;
  • 字符串就是一串字符, 表示文本类型的数据, 可以"一对双引号"或者'一对单引号'定义一个字符串, 字符串定义格式为 字符串变量名 = '字符串的文本内容' 常用函数/操作 获取字符串中的指定位置字符( 根据...
  • CString 字符串切割函数

    千次阅读 2016-12-14 18:03:56
    CString函数字符串查找和切割,保存子字符并输出
  • c语言字符串分割函数

    千次阅读 2018-06-13 14:38:40
    C语言字符串分割strsep函数用于分解字符串为一组字符串定义语句为char *strsep(char **stringp, const char *delim);使用实例:#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &...
  • python中根据字符串调用函数

    千次阅读 2016-05-30 14:13:36
    在多进程中,可能传递过来的是一个字符串,那么我怎么来调用一个已经存在的函数呢,主要就是使用到getattr函数的作用,这个函数就是在使用字符串得到这个字符串对应的函数的对象,然后就可以进行执行,如下所示: ...
  • C++之定义字符串

    万次阅读 2019-06-24 19:11:40
    在C++中有两种字符串的概念: 1 string类。 在C++中,字符串大多数时候用来指代string类。这时C++ STL中的一个类,包含了各种常用的字符串操作。定义方法为 string var; 或 string var(init_list); 或 string var = ...
  • 字符串复制函数strcpy()

    万次阅读 2019-05-26 14:58:31
    两个字符串变量不可以使用“=”进行直接赋值,只能通用strcpy()函数进行赋值。strcpy是 string copy的缩写,即“字符串复制”。他的原型是: #include<stdio.h> char *strcpy(char *dest, const char *src); ...
  • 字符串函数 数字函数 列表函数 颜色函数 Introspection 函数 三元函数等 当然除了自备的函数功能之外,我们还可以根据自己的需求定义函数功能,常常称之为自定义函数。 下面将给大家详细介绍前 4 种最常用的函数
  • 除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串。下面写一个程序: # include <stdio.h> int main(void) { char str[10]; //str是string的缩写, 即字符串 printf(“请输入字符串:”); scanf...
  • C中字符串操作函数

    千次阅读 2016-06-03 22:12:11
    C中字符串操作函数 strtok函数char *strtok(char *s, const char *delim);函数说明:strtok()用来将字符串分割成一个个判断。参数s指向与分割的字符串,参数delim则为分割字符串,当strtok在参数s的字符串中发现到...
  • python 实现一个字符串的逆序函数

    千次阅读 2018-07-24 20:06:29
    # 实现一个字符串的逆序函数 def nixv(s): sum = "" #定义字符串 for i in reversed(range(len(s))): #i逆序遍历 sum = sum + s[i] #使单独的字符串组合成整体 return sum ...
  • 返回 Variant (Integer),为字符串比较的结果。 语法 StrComp(string1, string2[, compare]) StrComp 函数的语法有下面的命名参数: 部分 说明 string1 必要参数。任何有效的字符串表达式。 string2 ...
  • matlab处理字符串的一些函数

    千次阅读 2012-01-08 14:12:31
    matlab处理字符串的一些函数 字符串和它的ASCII表示之间转换外,MATLAB还提供了大量的其它的有用的字符串转换函数。它们包括: 表6.1 字 符 串 转 换 abs 字符串到ASCII转换 dec2hex 十进制...
  • 本篇博客是对MOOC:向函数传递和返回字符串的笔记整理。 字符指针的定义 在进入题目这几个函数的编写之前,首先要在字符指针的定义上注意一点: 如果定义的字符指针,那么指针可以修改,而字符串不能修改;...
  • C语言:定义字符串的几种方式

    万次阅读 多人点赞 2019-05-30 14:14:26
    #include <stdio.h> ... //定义字符串的几种方式 //字符串和字符数组的区别:最后一位是否是空字符 char names1[] = {'j', 'a', 'c', 'k', '\0'}; char names2[50] = "jack"; char * ...
  • C++ 根据字符串 调用同名函数

    千次阅读 2016-09-02 17:18:52
    根据字符串,调用与字符串同名函数: #include #include #include typedef void (*pFunc)(); std::map strFuncMap; void func1() { printf("this is func1!\n"); } void func2() { printf("this is func2!\...
  • strlen求字符串长度。 strcmp比较2个字符串是否一样。 strcat字符串连接操作。 strcpy字符串拷贝操作。 strncat字符串连接操作(前n个字符)。 strncpy字符串拷贝操作(前n个字符)。 strchr查询字串。 strstr 查询子串...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,231,805
精华内容 492,722
关键字:

定义字符串用什么函数