2012-11-12 136 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

相關問題