2017-06-03 9 views
0

私は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

まあを交換したいものの上に、バック"son"(および'\0')を移動する必要がありますそして最後に「息子」。期待通りに働いて、私は言うだろう。おそらく、バックスペース文字 '\ b'で置き換えることは、' removeString'を実装するための最善の方法ではありませんでした。 –

+0

次回は、適切な質問にしてください! – Stargateur

+0

'\ b'を画面の後ろに印刷すると、前に画面上にあったものが上書きされます。カーソルを左にして '\ b'を画面に印刷すると、何も起こりません。あなたの場合、 "The"の最初の3文字の上に "The"、次に6 '\ b'(最初の4つは "後ろに"、最後は2は何もしません)、そして "son"古いスタイルのプリンタで実際の用紙に印刷していた場合は、「The」と「son」が重ねて印刷されていることがあります。 – pmg

答えて

1

あなたはそれが ``、その後、6つのバックスペース(これ以前に印刷された ``消去)を、印刷し、あなたが

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 
} 
関連する問題