char
cを の先頭に追加するにはどうすればよいchar* myChar
ですか? 私c
は の値を持ち、 の値"A"
を持ってmyChar
います"LL"
。c
の前にどのように追加できますmyChar
か"ALL"
?
3492 次
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 に答える