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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
s12xxxxxxx

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

#1

投稿記事 by s12xxxxxxx » 12年前

例 ./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);
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 12年前

とりあえず気付いたことを書いておきます。
・例の出力もおかしい気がします。
・2個以上の引数を与えた場合、メモリリークします。
・終端文字の分のバッファ(記憶領域)が足りません。
・交換する位置をiを使って指定するのはおかしいと思います。
・できれば最後にreturn 0;した方がいいです。
・mallocのエラーチェックもあるとさらに良いでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

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

#3

投稿記事 by usao » 12年前

うーん,逆に「表示する」だけならば
文字列をコピーしたりとかする必要はないと思います.
もっと簡単に考えてみてはいかがでしょう.

コード:

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] );  }

s12xxxxx

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

#4

投稿記事 by s12xxxxx » 12年前

申し訳ありません、出力の例が間違っています。
deswaqです。
一文字ずつ表示したら良いのではないかというご指摘をいただきましたが、課題で文字列を一つずつ表示するよう指示されているので、それはできません。

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

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

#5

投稿記事 by usao » 12年前

いまいち意味がわかりませんが,
一旦,「反転した文字列を用意」することが指定されているのでしょうか?
だとしても,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;
}

s12xxxxxxx

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

#6

投稿記事 by s12xxxxxxx » 12年前

日本語下手で申し訳ありません。
おかげ様で解決しました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る