1

私のプログラムでは、標準ライブラリまたは IO 関数を使用せずに char(char) を string(char *) に追加する必要があります。例えば:

char *s = "This is GOO";
char c = 'D';

s = append(s, c);

s は文字列 "This is GOOD" を生成します。これを達成するために配列を操作する適切な方法はありますか? また、文字数から文字列を生成するだけで十分です。私はmallocを使用できると確信していますが、ポジティブではありません...

char * app(char* s, char c){
    char *copy;
    int l = strlen_(s);
    copy = malloc(l+1);
    copy = s;
    copy[l] = c;
    copy[l+1] = '\0';
    return copy;
}

strcpyが使えない

4

2 に答える 2

1
#include <stdlib.h>

char *append(char *s, char c)
{
    int i = 0, j = 0;
    char *tmp;
    while (s[i] != '\0')
        i++;
    tmp = malloc((i+2) * sizeof(char));
    while (j < i)
    {
        tmp[j] = s[j];
        j++;
    }
    tmp[j++] = c;
    tmp[j] = '\0';
    return tmp;
}

int main(void)
{
    char *s = "This is Goo";
    char c = 'D';
    s = append(s, c);
    return 0;
}
于 2013-03-14T03:14:27.243 に答える
1

これは授業のように聞こえるので、答えを明かすことなく、次のことを大まかに行う必要があります。

  1. 文字列の長さを決定します。つまり、'\0'ターミネータを見つけます。
  2. 1 文字長い新しい char 配列を割り当てます。
  3. 古い文字列を新しい文字列にコピーします。
  4. 最後に新キャラ追加。
  5. '\0'新しい文字列の末尾にターミネータがあることを確認してください。

(既存の文字列の変更が許可されている場合は、手順 2 と 3 をスキップできます。ただし、この例でchar *s = "This is GOO"s、変更できない文字列リテラルを指しています。つまり、その場で変更することはできず、コピーを使用する必要があります。 )


投稿したコードに関するコメント:

char * app(char* s, char c) {
    char *copy;
    int l = strlen_(s);
    copy = malloc(l+1);    /* should be +2: +1 for the extra character and +1 for \0 */
    copy = s;              /* arrays must be copied item by item. need a for loop */
    copy[l] = c;
    copy[l+1] = '\0';
    return copy;
}
于 2013-03-14T02:59:27.313 に答える