ページ 11

文字列の文字の並びを反転する関数

Posted: 2015年8月26日(水) 16:35
by John Doe
#include<stdio.h>

int str_length(const char s[][128],int n)
{
int len = 0;

while(s[n][len])
len++;

return len;
}

void rev_string(char s[][128],int n)
{
int i, j, num;
char tmp;

for(i = 0;i < n;i++)
num = str_length(s,i);
for(j = 0;j < (num/2) ;j++)
{
tmp = s[j];
s[j] = s[num - j - 1];
s[num - j - 1] = tmp;
}
}

void put_strary(const char s[][128],int n)
{
int i;
for(i = 0;i < n;i++)
printf("s[%d] = \"%s\"\n",i,s);
}

int main(void)
{
char s[][128] = {"SEC","ABC"};
int i;

put_strary(s,2);
rev_string(s,2);
puts("文字の並びを反転すると以下のようになる.");
put_strary(s,2);

return 0;
}

これでは反転しませんでした何がダメなんでしょう?

Re: 文字列の文字の並びを反転する関数

Posted: 2015年8月26日(水) 17:03
by みけCAT
John Doe さんが書きました:これでは反転しませんでした何がダメなんでしょう?
rev_string関数の処理がダメです。
中括弧が足りません。

コード:

void rev_string(char s[][128],int n)
{
	int i, j, num;
	char tmp;

	/* s[0], ... , s[n-1]の先頭から格納された文字列の長さを順に求める。 */
	/* s[0], ... , s[n-2]の先頭から格納された文字列の長さは捨て、s[n-1]の先頭から格納された文字列の長さをnumに格納した状態で次の処理に進む。 */
	for(i = 0;i < n;i++)
		num = str_length(s,i);
		/* 出力に関係ないs[n]について、反転っぽいけど反転処理になるとは限らない謎の処理を行う。 */
		for(j = 0;j < (num/2) ;j++)
		{
			tmp = s[i][j];
			s[i][j] = s[i][num - j - 1];
			s[i][num - j - 1] = tmp;
		}
}

Re: 文字列の文字の並びを反転する関数

Posted: 2015年8月26日(水) 17:32
by John Doe
つまり・・・どうすればいいんですか?

Re: 文字列の文字の並びを反転する関数

Posted: 2015年8月26日(水) 17:38
by みけCAT
John Doe さんが書きました:つまり・・・どうすればいいんですか?
今の「長さをそれぞれのデータについて求めた後、無効なデータに対して謎の処理を行う」プログラムを、
「それぞれのデータについて、長さを求めた後それを用いて反転処理を行う」プログラムに修正してください。

Re: 文字列の文字の並びを反転する関数

Posted: 2015年8月26日(水) 17:40
by John Doe
できました!最初のfor文の中括弧がなかったのですね!見落としていました、ありがとうございます。

Re: 文字列の文字の並びを反転する関数

Posted: 2015年8月26日(水) 17:52
by みけCAT
解決したのでしたら、解決チェックをお願いします。
投稿画面の「送信」ボタンの右にある「解決!」にチェックを入れた状態で返信をしてください。