ポインタを用いて文字列を逆順にして表示する

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

トピックに返信する


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

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

トピックのレビュー
   

展開ビュー トピックのレビュー: ポインタを用いて文字列を逆順にして表示する

Re: ポインタを用いて文字列を逆順にして表示する

#4

by usao » 4年前

オフトピック
引用で元を見れるのは知りませんでした.
なので,「失われ」という表現を用いました.

途中から斜体になっていることから

コード:

s[i]
と書いたのだろうな,とだけは察しは付くけど,他の現象の有無は自分はわからん(知らん)ので.

Re: ポインタを用いて文字列を逆順にして表示する

#3

by みけCAT » 4年前

main関数内の変数sが未初期化のまま使用されているので、強制終了の原因になります。
sに(mallocで確保した領域などの)有効なバッファへのポインタを代入してから
scanf以降を実行するようにしないといけません。

さらに、

コード:

        for(i=0; i<n; i++){
                s[i]=s[n-i];
        }
の部分も間違っていますね。
  • n文字の文字列の最後の文字はn-1番目 (0-origin)
  • 交換する際は、一旦データを退避させる (不要な方法もあるが、わかりにくいと考えられる)
  • 各要素を高々1回交換する
というポイントを踏まえ、

コード:

        for(i=0; i<n-i-1; i++){ /* 交換する要素がかぶらないようにする */
                char t=s[i]; /* データを退避させる */
                s[i]=s[n-i-1]; /* 交換対象を適切にする */
                s[n-i-1]=t;
        }
とするべきでしょう。
オフトピック
usao さんが書きました:
4年前
(おそらく配列関係の記述がいくらか失われてしまっていると思うので,今の状態だと元のコード状態が不明)
掲示板の変な仕様を踏んでしまうと別かもしれませんが、基本的に元のコードは失われないはずです。
引用ボタンを押すことで、元のコードを見ることができます。

Re: ポインタを用いて文字列を逆順にして表示する

#2

by usao » 4年前

オフトピック
ここでコードを提示する際はちゃんとタグを使って書かないとダメです.
(おそらく配列関係の記述がいくらか失われてしまっていると思うので,今の状態だと元のコード状態が不明)

ポインタで文字列の反転がどうの という話,
最近teratailで見たような気がするので,探してみたらどうか.

ポインタを用いて文字列を逆順にして表示する

#1

by H_A » 4年前

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

void printf_rev(char *s){

int i, n=strlen(s);

for(i=0; i<n; i++){
s=s[n-i];
}

}

int main(void){

char *s;

printf("Enter word : ");
scanf("%s", s);
printf_rev(s);

printf("%s\n", s);

return 0;
}


実行すると何も表示されませんでした...
関数内の何が違うかわかりません、ヒントを教えてもらえると助かります。

ページトップ