ページ 11

コマンドライン引数の文字を逆順に表示する(課題)

Posted: 2013年11月09日(土) 12:42
by s12xxxxxxx
例 ./a.out qawsed
出力 deswad
ここまで作りましたが、abcdeと入力するとbdceと出力されます。。。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  int i,j,m;
  char *array,temp;
  
  
  for(i=1; i<argc; i++) {
    array=(char *)malloc(strlen(argv[i])*sizeof(char));
    strcpy(array,argv[i]);
     for(j=strlen(argv[i]),m=j/2; m>-1; j--,m--) {
	    temp=array[i-1];
      array[i-1]=array[j];
      array[j]=temp;
      }
    printf("%s",array);
    puts("");
  }
  free(array);
}

Re: コマンドライン引数の文字を逆順に表示する(課題)

Posted: 2013年11月09日(土) 13:07
by みけCAT
とりあえず気付いたことを書いておきます。
・例の出力もおかしい気がします。
・2個以上の引数を与えた場合、メモリリークします。
・終端文字の分のバッファ(記憶領域)が足りません。
・交換する位置をiを使って指定するのはおかしいと思います。
・できれば最後にreturn 0;した方がいいです。
・mallocのエラーチェックもあるとさらに良いでしょう。

Re: コマンドライン引数の文字を逆順に表示する(課題)

Posted: 2013年11月09日(土) 13:12
by usao
うーん,逆に「表示する」だけならば
文字列をコピーしたりとかする必要はないと思います.
もっと簡単に考えてみてはいかがでしょう.

コード:

char str[ 6 ] = "01234";  //こんなのがあったとして…

//前から1文字ずつ順に表示
for( int i=0; i<5; i++ )
{  printf( "%c", str[i] );  }

//じゃあ,逆順に表示するなら?
for( i=???;  i>=0;  i-- )
{  printf( "%c", str[i] );  }

Re: コマンドライン引数の文字を逆順に表示する(課題)

Posted: 2013年11月09日(土) 13:26
by s12xxxxx
申し訳ありません、出力の例が間違っています。
deswaqです。
一文字ずつ表示したら良いのではないかというご指摘をいただきましたが、課題で文字列を一つずつ表示するよう指示されているので、それはできません。

Re: コマンドライン引数の文字を逆順に表示する(課題)

Posted: 2013年11月09日(土) 14:16
by usao
いまいち意味がわかりませんが,
一旦,「反転した文字列を用意」することが指定されているのでしょうか?
だとしても,1文字ずつ反転作業を行う手順 はそのまま使えると思いますが.

コード:

//文字列SrcStrを反転した文字列を作成して表示する
void ReversePrint( const char *SrcStr, int length )
{
	char *ResultBuff = (char*)malloc( (length+1) * sizeof(char) );

	for( int i=0; i<length; i++ )
	{	ResultBuff[i] = SrcStr[ length - 1- i ];	}

	ResultBuff[ length ] = '\0';
	printf( "%s\n", ResultBuff );
	free( ResultBuff );
}
//
int main( int argc, char *argv[] )
{
    for( int i=1; i<argc; i++ )
    {    ReversePrint( argv[i], strlen( argv[i] ) );    }
    return 0;
}

Re: コマンドライン引数の文字を逆順に表示する(課題)

Posted: 2013年11月09日(土) 14:42
by s12xxxxxxx
日本語下手で申し訳ありません。
おかげ様で解決しました。ありがとうございました。