C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 配列 逆順


(過去ログ 87 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■51602 / inTopicNo.1)  配列 逆順
  
□投稿者/ ワンダ (1回)-(2010/07/11(Sun) 22:49:05)

分類:[C/C++] 

文字列を渡すと,その文字列の長さを返す関数 string_length() を書きなさい.また、この関数を使って渡された文字列を逆順にする関数 string_reverse() を書きなさい.


上記のような課題が出されたのですが、いまいちよくわからないので質問出せてください。

#include <stdio.h>
#define N 10    /* 配列の要素数 */

int main()
{
    int a[N] = {4, 2, 11, 4, 15, 7, 9, 12, 3, 6};
    int b[N];
    int i;
    
    for (i = 0; i < N; i++) {
        b[i] = a[N-1-i];
    }
    for (i = 0; i < N; i++) {
        printf("%4d", b[i]);
    }
    printf("\n");
    return 0;
}

とりあえず関数等は考えずに、配列の要素を逆順にする構造を考えてみました。上記のものでは数字は逆順にできるんですが、文字列を逆にする方法がいまいちわからないので教えていただけると助かります。


引用返信 編集キー/
■51603 / inTopicNo.2)  Re[1]: 配列 逆順
□投稿者/ よねKEN (540回)-(2010/07/11(Sun) 23:16:28)
よねKEN さんの Web サイト
No51602 (ワンダ さん) に返信
> 上記のものでは数字は逆順にできるんですが、文字列を逆にする方法がいまいちわからないので教えていただけると助かります。

ということは、文字列とは何か?を理解されていない、ということですね。
Cの文字列は単なる文字の配列で、文字列を構成する個々の文字要素に加えて最後の要素として'\0'を含めたもの、です。
最後の'\0'以外の要素を、数字での逆順にやったのと同様にすればよいですよ。


引用返信 編集キー/
■51609 / inTopicNo.3)  Re[1]: 配列 逆順
□投稿者/ .SHO (1361回)-(2010/07/12(Mon) 00:38:48)
No51602 (ワンダ さん) に返信

> 文字列を渡すと,その文字列の長さを返す関数 string_length() を書きなさい.

int string_length(char *p){return strlen(p);}

引用返信 編集キー/
■51620 / inTopicNo.4)  Re[2]: 配列 逆順
□投稿者/ すなふきぬ (17回)-(2010/07/12(Mon) 13:50:10)
No51609 (.SHO さん) に返信
> ■No51602 (ワンダ さん) に返信
> 
>>文字列を渡すと,その文字列の長さを返す関数 string_length() を書きなさい.
> 
> int string_length(char *p){return strlen(p);}

strlenを自作するなら

#include <stddef.h> /* size_t */
size_t string_length(const char *s){
  size_t i;
  for (i=0; s[i]; i++);
  return i;
}

でもいいかも。size_tを使わないならintやunsigned longでもOK。

引用返信 編集キー/
■51634 / inTopicNo.5)  Re[3]: 配列 逆順
□投稿者/ επιστημη (2534回)-(2010/07/13(Tue) 06:03:16)
επιστημη さんの Web サイト
void string_reverse(char* p) {
  int i = 0;
  int j = string_length(p) -1 ;
  while ( i < j ) {
    p[i] と p[j] を交換する
    ++i;
    --j;
  }
}

引用返信 編集キー/
■51674 / inTopicNo.6)  Re[4]: 配列 逆順
□投稿者/ .SHO (1364回)-(2010/07/13(Tue) 21:36:00)
>     p[i] と p[j] を交換する

void swap( char *p, int i, int j ) {
  int w = p[i];
  p[i] = p[j];
  p[j] = w;
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -