ポインタを利用して文字列反転

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

ポインタを利用して文字列反転

#1

投稿記事 by 弱者 » 4年前

ポインタを使って文字列を反転させるプログラムを作っています。
いろいろ試してみたのですがどうもうまくいきません。
m_ptの出力結果がFのみでgyakuの出力結果が何も出ません。
どこが間違えているのかわからないので指摘していただきたいです。



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

int main(void)
{

char mojiretsu[13] = "ABCDEFGHIJKL"; //元の文字列
char gyaku[13] = ""; //変更後の文字列
char* m_pt1; //文字列ポインタ
char* m_pt2;

printf("▽変更前の情報\n");
printf("mojiretsu配列の中身は……「%s」\n", mojiretsu);
printf("\n");

//代入
m_pt1 = mojiretsu;
m_pt2=gyaku;

//NULLの手前まで移動
m_pt1 = mojiretsu + strlen(mojiretsu);

//NULLから格納されるのでプラス1
m_pt2 = gyaku+1;


for (int i = 0; i < strlen(mojiretsu); i++)
{
*m_pt1 = *m_pt2;
m_pt1--;
m_pt2++;
}


//文字列制御/↑ここまで///////////////////////
printf("▽変更後の情報\n");
printf("m_pt1配列の中身は……「%s」\n", m_pt1);
printf("\n");
printf("gyaku配列の中身は……「%s」\n", gyaku);

getchar();
return 0;
}

アバター
かめのこのこのこ
記事: 15
登録日時: 6年前

Re: ポインタを利用して文字列反転

#2

投稿記事 by かめのこのこのこ » 4年前

NULL まで位置を反転しなくても大丈夫ですぞ

gyaku配列が
[0][1][2][3][4][5][6][7][8][9][10][11][12]
'L''K''J''I''H''G''F''E''D''C''B''A'NULL
となればOKなのです
それを踏まえて修正してみてください
ここからはヒントをと

ヒント1
► スポイラーを表示
ヒント2
► スポイラーを表示
ヒント3
► スポイラーを表示
オフトピック
ヒントをスポイラーで隠すの楽しい :-)

弱者

Re: ポインタを利用して文字列反転

#3

投稿記事 by 弱者 » 4年前

分かりやすいヒントと丁寧な回答ありがとうございました!
無事に分かることができました!本当に感謝です。

かずま

Re: ポインタを利用して文字列反転

#4

投稿記事 by かずま » 4年前

弱者 さんが書きました:
4年前
無事に分かることができました!
無事に分かることができたのなら、どんなコードが書けたのかを示してください。

私なら次のようなコードを書きます。

コード:

#include <stdio.h>   // printf, getchar
#include <string.h>  // strlen

int main(void)
{
	char mojiretsu[] = "ABCDEFGHIJKL", gyaku[sizeof mojiretsu];

	printf("▽変更前の情報\n"
	       "mojiretsu配列の中身は……「%s」\n\n", mojiretsu);

	char *m_pt1 = mojiretsu + strlen(mojiretsu), *m_pt2 = gyaku;
	while (m_pt1 > mojiretsu) *m_pt2++ = *--m_pt1;
	*m_pt2 = '\0';
	
	printf("▽変更後の情報\n"
	       "m_pt1配列の中身は……「%s」\n\n"
	       "gyaku配列の中身は……「%s」\n", m_pt1, gyaku);

	getchar();
	return 0;
}

返信

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