char *my_strright(const char *src, int n) { const int len = strlen(src); n = std::min(n, len); // src 文字数、n の小さい方を n に代入 char *dst = new char[n + 1]; // メモリ確保 src += len - n; // src をコピー開始位置に合わせる for(int i = 0; i < n; ++i ) { *dst++ = *src++; // 文字コピー } *dst = '\0'; // 終端記号のヌル文字を忘れずに return dst - n; // dst は n だけ進んでいるので、n を引いたアドレスを返す }
解説:
char *my_strright(const char *src, int n) { const int len = strlen(src); n = std::min(n, len); // src 文字数、n の小さい方を n に代入 char *dst = new char[n+1]; // メモリ確保 char *dst0 = dst; // 先頭アドレスを保存 src += len - n; while( (*dst++ = *src++) != '\0' ) {// ヌル文字までコピー } return dst0; // アロケートしたアドレスを返す }
前: | 次: