文字列を逆順して出力するプログラミングがわかりません。
#include <stdio.h>
#include <string.h>
void reverse(char *moji, char *gyaku);
int main(void)
{
char x[30];
char y[30];
puts("文字を入力してください。\n");
scanf("%s", x);
reverse(x, y);
printf("逆順すると%sです。\n", y);
return (0);
}
void reverse(char *moji, char *gyaku)
{
int i, len;
len = strlen(moji);
gyaku = moji + len - 1;
for(i = 0; i < len; i ++){
putchar((int)*gyaku);
gyaku--;
}
}
理想とする実行結果は
文字を入力してください。
abcdefg
逆順するとgfedcbaです。
なんですが、
上記のソースを実行すると
文字を入力してください。
abcdefg
gfedcba逆順すると(謎の漢字)です。
となります。
どこがおかしいんでしょうか?
よろしくおねがいします。
No.3ベストアンサー
- 回答日時:
> gyaku = moji + len - 1;
最終的な gyaku の終端を決めるのに moji は直接関係しません。moji の長さだけです。
#include <stdio.h>
#include <string.h>
void reverse( char *moji, char *gyaku )
{
int len;
len = strlen( moji );
gyaku += ( len - 1 ); // moji とは直接関係なし
while( *moji ){
*gyaku = *moji;
putchar( *gyaku );
gyaku--;
moji++;
}
}
void main()
{
char x[30] = "123456789";
char y[30] = { 0x00 }; // 初期化
reverse( x, y );
printf( " 逆順すると %s です。\n", y );
}
注:インデントに全角空白を用いています。タブに一括変換して下さい。
No.4
- 回答日時:
gyakuの最後に'\0'を入れ忘れないようにしましょう。
余裕があれば、文字数が29文字を超える場合も考慮しましょう。(文字列の変数が'\0'を含めて30文字分で定義してあるので)
No.2
- 回答日時:
例えば、"abcd"(長さ4)を逆順にした"dcba"を求める場合を考えてみます。
reverse関数の中でどういう処理をすればいいかというと、
・gyaku[0]にmoji[3]('d')を入れる。
・gyaku[1]にmoji[2]('c')を入れる。
・gyaku[2]にmoji[1]('b')を入れる。
・gyaku[3]にmoji[0]('a')を入れる。
・gyaku[4]に'\0'を入れる。
ですね。
さて、長さ4の文字列の場合は上記のとおりでしたが、
一般に長さnの文字列の場合はどういう風にすればよいでしょうか。考えてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
C言語の入力した文字を反転させるプログラミングの仕方が分かりません。
Ruby
-
strcat関数を自作したいです
C言語・C++・C#
-
str系関数を使わずに二つの文字を結合する方法
C言語・C++・C#
-
-
4
c言語でポインタ変数を用いた配列の反転操作
C言語・C++・C#
-
5
C言語 逆順の配列の仕方を教えてください
C言語・C++・C#
-
6
printf で二進表示を行いたい。
C言語・C++・C#
-
7
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
-
8
C言語の課題で困っています;
C言語・C++・C#
-
9
C言語初心者 ポインタについて、お助けください、、
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
干支のプログラム
-
charでの計算?
-
c++ 文字列を入力して、一文字...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
配列をnビットシフトする
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
fgetsなどのときのstdinのバッ...
-
switch文で文字を比較すること...
-
atoi( ) の反対をやりたい
-
int main()の・・・
-
Win32APIでのエディットボック...
-
strncpyと_tcsncpy_sのヌルの扱...
-
c言語でソーベルフィルタが作り...
-
”あいうえお” を ”おえういあ...
-
3桁区切(コンマ)記号をつけ...
-
全角文字を含んだ文字の並びを...
-
enumの記述について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報