2012-11-12 37 views
0

我工作的字符串中刪除兩個字符:{()}我的代碼搜索第一)之前它取代它和字符(用空格,其結果是{ }C:從字符串

我想什麼不要將匹配替換爲空白,而是從字符串中刪除括號,並使用我現有的代碼遞歸地檢查字符串。我試圖找到一種方式來瓦解其餘的字符使用memmove或類似的東西

char openKey[] = "({<["; 
char closeKey[] = ")}>]"; 
pch = strpbrk(parenthesesStack, closeKey); 
while (pch != NULL) 
{ 

    if (opposits(*(pch-1),*pch)){ 
     printf("%c %c\n" , *(pch-1), *pch); 
     memmove(pch-1," ",2); 
    } 
    pch = strpbrk (parenthesesStack,closeKey); 
} 
+0

可以肯定的是:你知道''把字符串變成一個二次運算,你可以檢查線性時間的格式嗎? –

回答

0

所以,你要串2位的其餘部分向左移動?

試試這個:

memmove(pch-1, pch+1, strlen(pch+1) + 1); 
0

而不是使用memmove()strlen()的,只是使用strcpy()

strcpy(pch - 1, pch + 1); 
+0

'strcpy'可能不是一個好的選擇,因爲源字符串和目標字符串重疊。 –

+0

'strcpy()'要複製字符串的唯一方法是從字符串的開始移動到結尾,從源讀取並寫入目標,直到遇到空值。但從技術上講,你是正確的 - 根據規範,當源和目標重疊時,行爲是不確定的,所以'memmove()'更安全。 – tomlogic