2012-11-12 112 views
1

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

简单的方法来说明:我如何将字符数组中的单个字符(用户输入不能被硬编码)作为strtok函数中的分隔符字符?

**要清楚这是不是整个程序,关注的仅仅是线的问题

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];     
}; 
+0

不是一个答案,以取代isspace电话。可以节省您的调试时间http://stackoverflow.com/questions/4031075/strtok-function-thread-safety – CCoder

回答

0

这不是解决问题的最佳途径:

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

2.remember与“\ 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 
3

你不知道。 Strtok可能不是你想要做的正确解决方案,而且你似乎误解了它的功能。 strtok的参数delim实际上是一组字符,表示为一个字符串。 strtok扫描输入字符串,直到找到任何位于分隔符字符串中的单个字符并认为该分隔符的开始。然后,它会查找分隔符字符串中任何位置的其他字符,并将它们也视为delimeters。

现在它完全不清楚你想要做什么,但它看起来像你正在寻找子字符串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)) 

取决于您希望如何处理数字和标点符号,你可能想用!isalpha!isalnum

相关问题