0

GetSubstring関数を使用して結果を出力し、次のようにする必要があります。

printf(GetSubstring("character", 4, 3, resultArray));

出力act

制限事項:他の関数またはマクロを呼び出すことはできません。他の変数を追加することはできません。変数を0に設定することはできません。関数GetSubstringのみを変更できます。

これが私の現在のコードです。

#include <stdio.h>
#include <stdlib.h>
char *GetSubstring(const char source[], int start, int count, char result[]);

int main(void)
{
const char source[] = "one two three";
char result[] = "123456789012345678";

puts(GetSubstring("character", 4, 3, result));

return(EXIT_SUCCESS);
}


char *GetSubstring(const char source[], int start, int count, char result[])
{
    char *copy = result;
    for (; *source != '\0' || *source == source[start]; start--)
    {
        while (*source != '\0')
        {
        *result++ = *source++;
        }

    }

    *result = '\0';
    return (copy);                                      // outputs character
    // return (result);                                 // outputs 012345678
}

ご協力ありがとうございました。

4

3 に答える 3

2

この行は文字列を終了することになっています:

*result += '\0'

ただし、既存の値にゼロを追加しているためではありません。代わりにゼロに設定してみてください。

*result = '\0'

さらに重要なことに、あなたのループは奇抜です。これには、トラブルのレシピがたくさん含まれています。

for (; *source != '\0' || *source == source[start]; start--)
{
    while (*source != '\0')
    {
        *result++ = *source++;
    }
}

startから始めて、それからインクリメントしてみませんか...

int i = 0;
const char *str = &source[start];

while( i < count && *str != '\0' ) {
    result[i++] = *str++;
}
result[i] = '\0';
于 2012-11-05T02:01:04.597 に答える
0

エラーはここにあるようです:result += '\0'。これは*result = '\0';

于 2012-11-05T01:58:19.487 に答える
0

これが私の解決策です。

  1. 部分文字列用にヒープにスペースを作る

  2. 文字列の最後に到達するか、コピーが完了するまで、ソースを繰り返します。返したい部分文字列に文字をコピーする

  3. 終了文字を追加する

  4. 結果を返す

お役に立てれば

char *GetSubstring(const char source[], int start, int count, char result[])
{
    int i = 0;
    char *substr = (char *) malloc(sizeof(char));
    for (; source[start] != '\0' && count > 0; count--)
    {
        substr[i++] = source[start++];
    }

    substr[i] = '\0';
    return (substr);                                   
}
于 2012-11-05T02:09:08.527 に答える