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

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ポインタを利用して文字列反転

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

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

#3

by 弱者 » 4年前

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

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
► スポイラーを表示
オフトピック
ヒントをスポイラーで隠すの楽しい :-)

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

#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;
}

ページトップ