質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3529閲覧

【C言語の質問です】文字列を前後逆転する関数について

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/02/22 06:55

C言語を勉強している初心者のものです。

今課題をいただき、その作成をしております。
先日提出(全18問)したのですが、大部分が間違っているので、
再度問題を見なおした上で提出してくれと言われてしまいました。

今回は課題なので、間違っている点を教えていただけませんでした。
個人的には、どの辺りが間違っているのかわからないため、
客観的な視点が欲しく、今回ご相談させていただきました。

18問の中の1つですが、
ソースが問題文との趣旨と外れているようでしたら
ご指摘いただけますと幸いです。

【問題】
文字列を前後逆転する関数を作成せよ。

【回答】

#include<stdio.h> #include<string.h> int main (void){ char a[100]; int i; int length; printf("英数字を入力してください。\n"); scanf("%s", a); length = strlen(a); for(i=0; i < length / 2 ; i++){ char tmp; tmp = a[i]; a[i] = a[length-i-1]; a[length-i-1] = tmp; } printf("文字を前後逆転した場合には%sとなります。\n", a); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

問題が 「関数を作成せよ」とありますので、入れ替えを実施する部分を関数化してみてはいかがでしょうか?

投稿2016/02/22 07:12

youji

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2016/02/22 07:21

ああ! 本当ですね。
退会済みユーザー

退会済みユーザー

2016/02/22 07:33

ご回答ありがとうございます! いただいたご回答ですが、関数を作成するというのは、 下記のサイトに載っている内容のような形で、関数内で 計算をし、それをprintf関数で表示するという認識でよろしかったでしょうか。 初歩的な質問になってしまい、申し訳ございませんが、 ご教示いただけますと幸いです。
youji

2016/02/22 07:43

サイトにあるように「部品化する」という認識でいいかと思います。 問題からすると、部品化する部分は「文字列を前後逆転する」なので、printf で表示するのは関数内で行わないほうがいいかと思います。
退会済みユーザー

退会済みユーザー

2016/02/22 08:54

ご返信ありがとうございます。 早速こちらでやってみます!!! ありがとうございました!
guest

0

こんにちは。

パッと見、ちゃんと動作しそうに見えます。偶数長の場合と奇数長の場合の両方でちゃんと動作するなら、基本的には問題ないと思います。

ただ、{の付け方が前回と異なりますね? どちらも良くある方式ですが、事情がないかぎり同じ人が両方を使うケースは比較的まれと思います。ちょっと気になる部分かも。

後、{ }で括られるブロックはその外側のブロックに対して、1レベルインデントしましょう。
最初の頃はインデントをあまり気にしない人が多いので、こちらが原因ではないと思うのですが、教官しだいかも。

投稿2016/02/22 07:20

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/22 07:30

ご回答ありがとうございます!! すいません、初歩的な質問になるとは思いますが、 質問させてください。 偶数長とご記載いただいておりますが、 こちらは偶数という認識でよろしかったでしょうか。 奇数長も同じく奇数のことでよろしかったでしょうか。 簡単に調べたところ、数学用語なのかなという認識なのですが、 ご教示いただけますと幸いです。 動作に関してですが、一応動きます。 ただ、ひらがな等入力すると文字化けが起きてしまうようです・・・ インデントご指摘いただきありがとうございます。 今後、気をつけていきます!
k1000

2016/02/22 08:16 編集

横から口をはさむようですが、こういうことだと思います。 偶数長とはここでは 'ABCD' のような文字数が偶数の文字列のことで、この手の文字列逆転の課題では中央付近を2回逆転してしまって(本来 'DCBA' となるべきところを)'DBCA' のようにしてしまうことがあるので、そうしたパターンのテストが必要ということです。 (以下雑談のようなものですが)それにしてもこの問題文、そのまま転載したのならほとんどこちらの事例そのままですね……。 激辛テクノロジ批評 (1) http://www.st.rim.or.jp/~phinloda/ruins/ruins076.html 激辛テクノロジ批評 (2) http://www.st.rim.or.jp/~phinloda/ruins/ruins077.html (文字化けする場合は文字エンコード ISO-2022-JP を指定してください)
Chironian

2016/02/22 08:10

k1000 さん、フォローありがとうございます。その通りです。 tomo3さん。言葉足らずですいません。 文字列の長さが偶数の時と奇数の時の両方でテストして正しい結果がでるならOKと思います。
退会済みユーザー

退会済みユーザー

2016/02/26 03:59

k1000さん、Chironianさん ご回答ありがとうございます。 理解できました!!! テストしてみたところ問題ありませんでした。 ご指摘ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問