• ベストアンサー

大文字の文字列→小文字の文字列

C言語初心者です。 ある演習問題をやっていて詰まっています。 自分で入力した大文字の文字列を小文字にするプログラムを作るという問題なのですが、↓の条件があり、こんがらがってしまいました。 ・入力した文字列に小文字が含まれていたら、エラーと表示して再び入力を促し、0を入力するとプログラム終了という流れにする。 ・ポインタ変数を使う。 ・continue文を使う。 ・標準ライブラリ関数は使わない。 です。 ・continue文というのがよくわからない。 ・宣言した関数でどの処理をすればいいのかわからない。 ・大文字を小文字にするというプログラムがわからない。 (アスキーコードをどう使うのか) でつまっています。 どなたかアドバイス・解説・模範解答・指摘などしていただけないでしょうか。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.6

> 文字列定数の前に 構文解析エラー > 警告: 組み込み関数 `printf' と型が矛盾します > 警告: データ定義が型や記憶クラスを持っていません > > というエラーがでました > これは何ですか・・・? printfの直前にある } は、int main(void){ の { と対応しています。 つまり、printfは関数の外で呼び出していることになります。 また、<stdio.h>もインクルードしていないようです。 ところで、アルファベットが連続していることは規格上保証されていません。処理系不明の状況で、 > while(a<='A' && a>='Z'){ > if(a>='a' && a<='z') { > a-='a'-'A'; といった処理は不適切です。

参考URL:
http://www.kijineko.co.jp/tech/superstitions/A-to-Z-is-sequence.html

その他の回答 (5)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> #include<string.h>を使わない ということは、<ctype.h>や<wctype.h>は使えるわけですね。 だったらtolowerやtowlowerを使えばよいのでは? そもそも処理系不明ですので... > (アスキーコードをどう使うのか) 文字コードがアスキーであることを期待することはできません。 また、キリル文字やギリシャ文字など、ラテン文字以外の対応も考えないといけないので、標準ライブラリなしでは困難です(対象となる文字集合と符号体系を特定するなら、手間はかかっても可能です)。

346mouse
質問者

補足

int main(void){ char a; int i; while(a<='A' && a>='Z'){ printf("Please input string>>"); scanf("%s" ,&a); if(a>='a' && a<='z') { printf("Error! Please input string, again.\n"); continue; } } a-='a'-'A'; } printf("%c",a); return 0; } 5つの回答や別のページを参考にプログラムを作ったのですが printf("%c",a);の部分で 文字列定数の前に 構文解析エラー 警告: 組み込み関数 `printf' と型が矛盾します 警告: データ定義が型や記憶クラスを持っていません というエラーがでました これは何ですか・・・?

noname#88772
noname#88772
回答No.4

こんにちは。 多少アドバイスを。 >・continue文というのがよくわからない。 調べれば一発です。 >・宣言した関数でどの処理をすればいいのかわからない。 ご自身で  ・自分で入力した大文字の文字列を小文字にする  ・入力した文字列に小文字が含まれていたら、エラーと表示して再び   入力を促し、0を入力するとプログラム終了という流れにする。 これが関数の内容です。 あとは処理の流れを他人でも解るレベルまで噛み砕く(分解)していけばいいです。 >・大文字を小文字にするというプログラムがわからない。 (アスキーコードをどう使うのか) アスキーコード表をまず確認。 その後文字を入力して対応する数字を出力するプログラムを作成すればわかります。 おそらく、今度はポインタの使い方で詰まるかなと思います。 ご参考までに。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

思うんだけど, 「標準ライブラリ関数は使わない」という制限って, おそろしく厳しいような.... printf すら使わせてもらえないなんて.

346mouse
質問者

補足

申し訳ありません。 #include<string.h>を使わないの間違えです。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

> 指摘などしていただけないでしょうか。 私はこれを行ないたいと思います。 そこで、お書きになったコードを見せてくださるようお願いいたします。

  • kanna00
  • ベストアンサー率40% (14/35)
回答No.1

回答を見てしまうと勉強にならないかと思いますので、 軽くアドバイスを。 continueはググれば出てきたので調べましょう。 ポインタと使うという以外は簡単なプログラムですが、 流れ的には、 一文字ずつ文字を調べ、小文字ならエラー、0なら終了、大文字なら変換。 大文字の場合は関数に飛ばし、 大文字→小文字をする。 大文字→小文字変換は、 ライブラリ関数を使ってはいけないということなので、 コード表を眺めていればわかると思いますが、 大文字にある数を足すと小文字になります。 これを使えばできるかと思います。