c - 将char传递给strtok?

时间:2012-11-12 06:25:54

标签: c strtok

在下面的代码行中,我试图在字符串中找到变量字符串时替换键字符串。例如,如果我有一个字符串“hello VARIABLE world”,KEY值将代替VARIABLE值,使字符串“hello KEY world”而不是原始字符串。我的理论是将字符串标记为变量的第一个字符(在字符串中)(newfirst),标记化变量字符(newtrash),然后标记字符串的其余部分(newsecond)。然后连接newfirst + key + newsecond。问题是,myVariables [i] .variable [0]和myVariables [i] .variable [varlength - 1]正在读取前两行中的strtok函数的字符,并且编译器要求使用const char *。任何想法如何格式化这些字符串的第一个和最后一个值在strtok函数中工作?

简单地解释一下:如何从char数组中传递单个字符(用户输入,因此不能硬编码)作为strtok函数中的deliminator字符?

**要明确这不是整个程序,只是对问题的关注线

  strcpy(newfirst, strtok(testString, myVariables[i].variable[0]));
   strcpy(newtrash, strtok( NULL, myVariables[i].variable[varlength - 1]));
   strcpy(newsecond, strtok(NULL, "\n"));
   strcat(newfirst, myVariables[i].key);
   strcat(newfirst, newsecond);


  struct variablePairs {
     char variable[20];                 
     char key[20];                  
 };

2 个答案:

答案 0 :(得分:3)

你没有。对于你想要做的事情,Strtok可能不是正确的解决方案,你似乎误解了它的作用。 delim的{​​{1}}参数实际上是一个字符集,表示为字符串。 strtok扫描输入字符串,直到它找到分隔符字符串中的任何单个字符并认为是分隔符的开头。然后它会查找在分隔符字符串中的任何位置的其他字符,并将它们视为分隔符。

现在它根本不清楚你要做什么,但看起来你正在搜索子串strtok并用其他字符串替换它。 VARIABLE可能就是你想要的。类似的东西:

strstr

这将找到变量字符串,即使它嵌入另一个单词 - 如果你想避免这种情况,你还需要检查确保匹配被空格包围或在字符串的末尾:

if ((p = strstr(input, myVariables[i].variable))) {
    strncpy(output, input, p-input);
    strcat(output, myVariables[i].key);
    strcat(output, p+strlen(myVariables[i].variable));
} else {
    /* variable not found */
    strcpy(output, input);
}

取决于您希望如何处理数字和标点符号,您可能希望将len = strlen(myVariables[i].variable); if ((p = strstr(input, myVariables[i].variable)) && (p == input || isspace(p[-1])) && (isspace(p[len]) || p[len] == 0)) 来电替换为isspace!isalpha

答案 1 :(得分:0)

这不是解决问题的最佳方法:

1.declare指针并将你的第一个或最后一个字符传递给它。

2.member以'\ 0'结束它以使其可解析为const char。

3.在你的strtok中使用(const char *)p表单。

char x[256]={0};
char *p;

p = malloc(2);
strcpy(x,"abcd");
*p = x[0];
memset(p+1,'\0',1);

printf("\n point p is %s\n",(const char *)p);

输出:

point p is a