0

charcを の先頭に追加するにはどうすればよいchar* myCharですか? 私cは の値を持ち、 の値"A"を持ってmyCharいます"LL"cの前にどのように追加できますmyChar"ALL"?

4

3 に答える 3

2

これは機能するはずです:

#include <string.h>    
char * prepend(const char * str, char c)
{
    char * new_string = malloc(strlen(str)+2);  // add 2 to make room for the character we will prepend and the null termination character at the end
    new_string[0] = c;
    strcpy(new_string + 1, str);
    return new_string;
}

使い終わったら、結果の新しい文字列を覚えておいてfree()ください。そうしないと、メモリリークが発生します。

また、同じ文字列に対してこれを数百回または数千回実行する場合は、はるかに効率的な他の方法があります。

于 2011-12-20T00:42:16.390 に答える
2

まず、新しい文字列のストレージを把握する必要があります。ソースについて私が知っているのがchar *.

新しいバッファを割り当てるには、次のようになります。

char * strprep(char c, const char * myChar)
{
    /* length, +1 for c, +1 for '\0'-terminator */
    char * newString = malloc(strlen(myChar) + 2);

    /* out-of-memory condition rolls downhill */
    if (newString == NULL) return NULL;

    /* populate the new string */
    newString[0] = c;
    strcpy(newString + 1, myChar);
    return newString;
}

その場で上書きするには、文字を移動して、文字列の新しい開始のためのスペースを空ける必要があります。

char * strprep(char c, char * myChar)
{
    int len = strlen(myChar);
    int i;

    /* Move over! */
    for (i = len; i >= 0; i--) myChar[i + 1] = myChar[i];

    /* Now plug in the new prefix. */
    myChar[0] = c;
    return c;
}

C ライブラリで使用できる場合memmoveは、ループの代わりに使用して、元の文字を 1 つ上にシフトできます。

于 2011-12-20T00:50:43.113 に答える
0

おそらく最も効率的ではありませんが、これは正しい方向への一歩です。これは明らかに直接的なアプローチです -

  int main()
   {
      int i;
      char tempc;
      for (i=0; i<strlen(str); i++)
      {
        tempc = c;
        c = str[i];
        str[i] = tempc;            
         str[i+1] = c;
      }
       *(str[i+1]) = malloc(1);
       str[i+1] = '\0';
    }
于 2011-12-20T00:57:02.003 に答える