2017-06-03 40 views
0

我想提出一個名爲removeString()功能的錯誤。它的目的是從一個文本爲什麼會出現在我的removestring功能

例如刪除一個字符串:如果文本是「錯誤的兒子」,我想刪除「錯誤」是「兒子」,我用這個功能。

原型爲:

void removeString(char source[], int start, int numofchrem); 

並且該程序是這樣的:

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

void removeString(char source[], int start, int numofchrem) 
{ 
    int i, j, k; 
    char n[20]; 
    j = start + numofchrem - 1; 
    for (i = 0; i < numofchrem; i++) 
    { 
     if (source[start] == '\0') 
      break; 
     source[j] = '\b'; 
     j--; 
    } 
    printf("%s", source); 
} 

int main() 
{ 
    char text[] = "the wrong son"; 
    void removeString(char source[], int start, int numofchrem); 
    removeString(text, 4, 6); 
} 

時,我本人第一字符調試它是這樣

"the \b\b\b\b\b\bson" 
源內的程序

當我使用打印內源文本:

printf("%s",source); 

該方案顯示,只有「兒子」而不是「兒子」。所以如果有人能幫助我,我會很感激。

+1

那麼什麼,它打印'的',然後6退格(從而清除先前打印'的'),最後是'兒子'。按預期工作,我會說。也許用退格字符'\ b'代替並不是實現'removeString'的最明智的方法。 –

+0

請下一次,以正確的問題! – Stargateur

+0

當您打印「\ B」與屏幕後面的東西,這東西覆蓋什麼在屏幕前面。當你用左邊的光標將'\ b'打印到屏幕上時,沒有任何反應。在你的情況下,你首先寫「The」,然後6'\ b'(前4個「後退」,後2個什麼都不做),然後是「兒子」,覆蓋「The」的3個首字符。如果您在舊式打印機上打印真正的紙張,則可能會看到「The」和「son」打印在另一個上面。 – pmg

回答

1

你需要移動"son"(和'\0')回來了,在您要更換

void removeString(char source[], int start, int numofchrem) 
{ 
    char *d = source + start; // d points to "wrong..." 
    char *s = source + start + numofchrem; // s points to "son" 
    while (*s != '\0') { 
     *d = *s; // replace 'w' with 's', 'r' with 'o', ... 
     d++; // point to next: "rong...", "ong...", "ng..." 
     s++; // point to next: "on", "n" 
    } 
    *d = '\0'; // terminate string 
} 
相關問題