ページ 11

ポインタを使用した文字反転処理

Posted: 2011年10月27日(木) 19:07
by 困り果てた大地
#include <stdio.h>
#include <string.h>

#define MAX_WARD 256

void main(void)
{
//===変数宣言===
char aDataIn[MAX_WARD]; //反転前文字列入力先
char aDataOut[MAX_WARD]; //反転後文字列格納先
char *pDataIn, *pDataOut; //反転前・後配列操作用ポインタ
int nStrlength; //入力文字数
int nLoopCntWord; //反転処理ループ用

printf("何か文字を入力してください(255文字以内)>");
scanf("%s", &aDataIn);

nStrlength = (int)strlen(aDataIn);
printf("\マークn文字数は「%d」文字です。\n", nStrlength);

//===文字列の反転処理===
pDataIn = ■■■■■■; //aDataIn の最終文字位置
pDataOut = ■■■■■■; //aDataOutの先頭
for( nLoopCntWord = 0; nLoopCntWord < ■■■■; nLoopCntWord ++)
{
■■■■■■ = *pDataIn;

pDataIn ■■;
pDataOut ■■;
}
■■■■■■ = ■■; //ここを入力せずに実行すると…

printf("*** 反転処理完了 ***\n");
printf("入力した文字列:%s\n", aDataIn);
printf("反転した文字列:%s\n", aDataOut);

rewind(stdin);
getchar();
}
ポインタを使用して入力された文字を反転する処理をしたいのですが黒い部分がよくわかりません。

Re: ポインタを使用した文字反転処理

Posted: 2011年10月27日(木) 19:56
by バグ
穴埋め問題なので、埋めてしまうと答えそのまんまになりますので、ちょっと形を変えてみました。
コメントを入れてありますので、順番に処理を追いかけていってみてください。

コード:

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

#define MAX_WARD 256

// 文字列の反転処理
void reverse(char* pStrIn, char* pStrOut, int nStrLen)
{
	pStrIn += (nStrLen - 1);
	*(pStrOut + nStrLen) = '\0';
	for (int i = 0; i < nStrLen; ++i)
	{
		*pStrOut++ = *pStrIn--;
	}
}

void main(void)
{
	char aDataIn[MAX_WARD];					// 反転前文字列入力先
	char aDataOut[MAX_WARD];				// 反転後文字列格納先
	int nStrLen = 0;

	// 文字列の入力
	printf("何か文字を入力してください(255文字以内)>");
	scanf("%s", &aDataIn);

	// 文字列長の表示
	nStrLen = (int)strlen(aDataIn);
	printf("\n文字数は「%d」文字です。\n", nStrLen);
	
	// 反転処理
	reverse(aDataIn, aDataOut, nStrLen);

	// 結果表示
	printf("*** 反転処理完了 ***\n");
	printf("入力した文字列:%s\n", aDataIn);
	printf("反転した文字列:%s\n", aDataOut);
	rewind(stdin);
	getchar();
}

Re: ポインタを使用した文字反転処理

Posted: 2011年10月27日(木) 21:07
by 困り果てた大地
>>バグさん
わざわざありがとうございます。
解読してみます

Re: ポインタを使用した文字反転処理

Posted: 2011年10月28日(金) 17:45
by 困り果てた大地
見栄張って解決済みにして、すみませんでしたー!わかりません!

pDataIn = ■; pDataOut = ■;
for( nLoopCntWord = 0; nLoopCntWord < nStrlength; nLoopCntWord ++)
{
nStrlength = *pDataIn;

pDataIn --;
pDataOut ++;
}
■ = '\0';

もはや限界っ!お助け願います