Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查字符串是否包含从索引到另一个索引的字符串 我尝试在C++中做一个解释器,我想做一个函数,当用户输入类型(a)时,它会给变量A的类型提供一个I/int或BoL或字符串。所以我的问题是,我想知道前五个字母是否是打字的(这是我认为最好的解决方案,以便做我想做的事情。但我的问题是如何用我下面做的另一种方式来做,因为这是一种非常丑陋的方式 if (str.at(0) == 't' && str.at(1) == 'y' && str.at(2) == 'p' && str.at(3) == 'e' && str.at(4) == '(' )_C++_String - Fatal编程技术网

检查字符串是否包含从索引到另一个索引的字符串 我尝试在C++中做一个解释器,我想做一个函数,当用户输入类型(a)时,它会给变量A的类型提供一个I/int或BoL或字符串。所以我的问题是,我想知道前五个字母是否是打字的(这是我认为最好的解决方案,以便做我想做的事情。但我的问题是如何用我下面做的另一种方式来做,因为这是一种非常丑陋的方式 if (str.at(0) == 't' && str.at(1) == 'y' && str.at(2) == 'p' && str.at(3) == 'e' && str.at(4) == '(' )

检查字符串是否包含从索引到另一个索引的字符串 我尝试在C++中做一个解释器,我想做一个函数,当用户输入类型(a)时,它会给变量A的类型提供一个I/int或BoL或字符串。所以我的问题是,我想知道前五个字母是否是打字的(这是我认为最好的解决方案,以便做我想做的事情。但我的问题是如何用我下面做的另一种方式来做,因为这是一种非常丑陋的方式 if (str.at(0) == 't' && str.at(1) == 'y' && str.at(2) == 'p' && str.at(3) == 'e' && str.at(4) == '(' ),c++,string,C++,String,对您的问题的直接回答可能是使用std::string::compare或std::string::find;我想,使用“c++string start with”这一术语的谷歌搜索会让您直接找到有优缺点的示例 但是,在编写非常简单的解析器时,c的字符串库中的标记器strtok可能会给我提供一种更简单的方法。strtok随后将字符串拆分为标记,其中对strtok的每次调用都返回下一个标记。分隔标记的字符作为参数传递给strtok: #include <iostream> #includ

对您的问题的直接回答可能是使用
std::string::compare
std::string::find
;我想,使用“c++string start with”这一术语的谷歌搜索会让您直接找到有优缺点的示例

但是,在编写非常简单的解析器时,c的字符串库中的标记器
strtok
可能会给我提供一种更简单的方法。
strtok
随后将字符串拆分为标记,其中对
strtok
的每次调用都返回下一个标记。分隔标记的字符作为参数传递给
strtok

#include <iostream>
#include<stdio.h>
#include <stdlib.h>

int main()
{

    std::string str = "type(a)";

    if (str.compare(0,5,"type(") == 0) {
        // string starts exactly with `type(`;
        // note: 'type (' would not match...
    }

    char* analyzeStr = strdup(str.c_str());
    char *token = strtok(analyzeStr, "(");
    if (token && strncmp(token, "type", strlen("type")) == 0) {
        // command starts with "type(" or "type  ("
        token = strtok(NULL, ")");
        if (token) {
            // value between brackets
            printf("analyzing type of '%s'", token);
        }
    }
    free(analyzeStr);

    return 0;
}
#包括
#包括
#包括
int main()
{
std::string str=“type(a)”;
如果(str.compare(0,5,“类型(”)==0){
//字符串以`type(`;
//注意:'类型('不匹配。。。
}
char*analyzeStr=strdup(str.c_str());
char*token=strtok(analyzeStr,“(”);
if(令牌和strncmp(令牌,“类型”,strlen(“类型”))==0){
//命令以“类型”或“类型”开头
令牌=strtok(空,“)”;
如果(令牌){
//括号内的值
printf(“分析“%s”的类型,标记);
}
}
免费(分析型);
返回0;
}
在使用它之前。由于设计用于在较简单的时间内解决较简单的问题,因此它附带了一些警告,可能不适用。例如,请注意需要
char*analyzeStr=strdup(str.c_str());
free(analyzeStr)
绕过源字符串对strtok的破坏性影响。