2017-04-16 4 views
-1
void SpacePlug(char *StringPtr, char Ch) 
{ 
    int i = 0; 
    while (*(StringPtr + i)!= '\0') 
    { 
     if (*(StringPtr + i)== ' ') 
     { 
      *(StringPtr + i) = '^^'; 
      printf("%c",*(StringPtr + i)); 
     } 
     i++; 
    } 
} 
int main() 
{ 
    char a[]= "Alton Tait"; 
    SpacePlug(a,); 
} 

機能は、私はそれはアルトンでなければなりませんので^^でアルトンテイトとの間のスペースを置き換えたいSpacePlug を使用^^テイト は私が出てくる厥、メイン.IN文字で文字列内の各スペースを交換することです私はどこが間違っていたのか知​​りたいです。ありがとうございます関数SpacePlugは文字列へのポインタと別のcharを引数として取ります。

+1

これはC(構文エラーあり)のようです。なぜC++タグを追加したのですか? – Olaf

+0

私は誰の助けも受け入れるだろうから。 –

+1

タグは注目を集めるのではなく、質問を並べ替えることです!サイトのルールに従い、[ask]を読んでください。 CとC++は**異なる**言語です。 – Olaf

答えて

0

'^^'は文字ではありません。複数の文字定数、which is not portableです。

int i = 0; 
while (*(StringPtr + i)!= '\0') 
{ 
    if (*(StringPtr + i)== ' ') 
    { 
     *(StringPtr + i) = '^'; 
    } 
    printf("%c", *(StringPtr + i)); 
    i++; 
} 

Demo.

のための代替品を作るために:

あなたのコードでは、あなたはまた、ifのプリントアウトを移動する必要がありますすなわち

SpacePlug(a, '^'); 

、単一文字の置き換えに適しています複数の文字を使用するには、全く異なるアプローチが必要です。

交換
  • ため
    • パスchar*は、文字列が余分な文字
    • は、二つのパス
    • 計算し、最初のパス
    • で、交換後の合計の長さの交換を行いますため拡大するのに十分なスペースがあることを確認してください後ろから順に、同じスペースを使用して、置き換えを実行します。
  • +0

    「^^」という二重の文字は残念です。本当にありがとうございました。ありがとうございました。 –

    +0

    私はそれを実行するときに、その唯一の出力は^それはAlton^taitを印刷していません。 –

    +0

    @A.Tait編集をご覧ください。 – dasblinkenlight

    0

    これは私がGCCを使用してコードをコンパイルしようとすると、私が手に出力されます:

    In function 'SpacePlug': 
    8:33: warning: multi-character character constant [-Wmultichar] 
          *(StringPtr + i) = '^^'; 
               ^
    8:33: warning: overflow in implicit constant conversion [-Woverflow] 
    In function 'main': 
    17:17: error: expected expression before ')' token 
        SpacePlug(a,); 
    

    あなたは問題のエラーレポートを含めHACEする必要があり、それが起こっているのかを確認する方が簡単です。

    あなたはあなたのコードにいくつかの問題を持っている:

    • は「^^」の文字が、2文字の文字列ではありません。 '^'は文字です。それが「マルチチャーター」エラーの理由です

    • あなたはSpacePlugの中で「Ch」を使用していません。置換文字はハードコードされています。私はいつも '^^'、存在しない。

    • mainで関数が正しく呼び出されていません。パラメータがありません。

    今解決してください。私が理解したところでは、 "SpacePlug"は文字列内のすべてのスペース、最初のパラメータを見つけようとし、それらを2番目のパラメータである文字に置き換えようとします。次のコードはうまく動作します:

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    
    void SpacePlug(char *StringPtr, char Ch, char *newString) 
    { 
        for (int i = 0; i < strlen(StringPtr); i++) 
        { 
         if (StringPtr[i] == ' ') 
         { 
          newString[i] = Ch; 
         } 
         else 
         { 
          newString[i] = StringPtr[i]; 
         } 
        } 
    } 
    int main() 
    { 
        char *a = "Alton Tait"; 
        char replace = '^'; 
        char *newString = (char *)malloc(strlen(a) + 1); // the +1 is for the null terminator 
        SpacePlug(a, replace, newString); 
        printf("%s\n", newString); 
    
        free(newString); 
    } 
    

    乾杯。

    +0

    ご協力ありがとうございますが、コードはコンパイルされていません。 –

    +0

    このコードは、 'newString'をNULLで終わらせることができません。割り当ては、NULLを考慮に入れるためにも大きくする必要があります。 – Blastfurnace

    +0

    そこでは、新しい文字列が関数の中で作成されるのではなく、パラメータとして扱われるように編集しました。私はメモリ空間を初期化し、それを破棄してから離します。この時間が欲しいと願っています。 – Luchq

    関連する問題