• ベストアンサー

C言語の文字列操作について

C言語について質問です。 整数を入力させ、その入力された整数に’1’が含まれているかどうかを調べるプログラムを作りたいのですが、うまくできません。 文字列操作を使えばよいのですかね? 可能であればプログラムを書いていただきたいです。

  • wgn30
  • お礼率0% (0/11)

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

  • ベストアンサー
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

10で割ったときのあまりが1であれば含まれている。 そうでなければその数を10で割り、最初にもどる。 割った数が0になれば終了。 こんなかんじでどうでしょ。

wgn30
質問者

補足

回答ありがとうございます。 その方法だと11,21,31などの数字のときはできますが、15とか100だとかの数字のときは、できないと思うのですが… 私の読解力が無いだけだったらすみません。

その他の回答 (6)

回答No.7

補足: #6様。質問が、入力方法に関するものか、その後に整数として入力成功した後の話か分からないので。 '1'があるかどうかだけなら、確かにgetcの方がいいですね。(エラーチェックをする場合でもそうかも。) 入力を信用するならともかく、「もしかしたら、整数以外の入力があるかも」とか「整数入力されてもintの範囲を越えた整数が入力されたら」「複数の入力がある場合」などまで考えるといきなり難しくなりますね("%d" の書式では対応できなくなる)。まあ、書式指定をマスターすれば、純粋な文字列として入力する分にはscanfの方が柔軟かもしれない。 質問者様がどこで困っているのか、によりますね。 蛇足の部分はこちらも自力で確認しました。

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

「fgets で読み込みつつ特定の文字があるかどうか 1文字ずつ調べる」くらいなら, 最初から getc を使った方が簡単だと思うの>#4. まあそもそも何をしたいのかが読み取れない謎質問なわけだが. 以下は蛇足: ・#2 への補足に対しては「あなたの理解力が足りていない」と指摘. ・gets は最新の規格でめでたく削除されました>#4. ・C では文字定数 '1' の型は int なので (ちなみに C++ では char型) 「int にキャストする」がまったく無意味>#5.

回答No.5

補足: strchr()関数の検索する文字(ここでは'1')は(int)でキャストする、という説明をたまに見かけますが、C++ならともかくC言語ではキャストは必要ないはずです。(C++がCの上位互換というのは厳密には「迷信」で、細かい違いがあります)。 これは一般論ですが、MSのVisualStudio の VC++ でC言語プログラムを書く場合、ソースファイル名には拡張子「.c」を付けることをお勧めします。拡張子なしでファイル名を指定すると、C++の拡張子.cppがデフォルトで付いてしまうので、C++言語としてコンパイルされてしまいます。

回答No.4

過去に書いてある答えでよいとは思いますが、No3様で使われている scanf() 関数は非常に使い方が難しいので、fgets()関数で純粋な文字列として読み、その文字列の中に'1'という「文字」があるかどうかをstrchr()関数で判別する、という方法もあると思います。 そして、入力された文字列の中に数字(または空白文字)以外の文字があった場合は「入力は整数ではありません」などとエラーを出す(おおまかですが)というような方針。 fgets()関数で読み込まれた文字列の最後(終端の'\0'の前)に'\n'がない場合は、バッファサイズ(マクロなどで定義しておく)に1行が入りきらなかったことになるので「入力が長すぎます」とやるなどの対処も必要でしょう。 なお、gets()関数はバッファオーバーラン(ググれば分かります)の危険があり、それを回避する方法がないので使ってはいけません。(最新の規格では確か廃止されるはずだと思う。)

回答No.3

#2で述べられている方法でやるのが普通ですし、特に理由がない限りそちらでやるべきだと思いますが、あえて整数を入力させ、文字列操作で1があるか調べるなら例えばこんなコードでしょうか。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int input; scanf("%d", &input); char *str; asprintf(&str, "%d", input); if (strchr(str, '1') != NULL) { printf("'%d' has '1'\n", input); } else { printf("'%d' does not have '1'\n", input); } free(str); return 0; } ちなみに、asprintfは標準の関数ではないので*BSDのlibcかglibcくらいでしか使えないと思いますが。

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

>C言語の文字列操作について >整数を入力させ、その入力された整数に 文字列なのか整数なのかどちらですか? >うまくできません。 とりあえずそのうまくいかないというプログラムを書いてください。

関連するQ&A

  • C言語で文字列操作を忘れてしまいました。

    長い間スクリプト言語ばかりやっておりまして、C言語に戻ると、文字列を返す 関数を作ろうとしましたが、お恥ずかしいながらできませんでした。 ローカル変数の値を戻り値に使おうとして、それがwarningになったり、動作が不安定になったりして、文字列を返す仕組みを完全に忘れてしまっていました。 例えば、"test"と言う文字列を返す関数を書きたいのですが、メモリ操作も考えた サンプルをだれか教えて欲しいです。 int main(void) { printf("%s", 「関数名」); }

  • C言語の整数の判別

    最近C言語の勉強を始めたのですが、 C言語で、整数だけの入力を許可してそれ以外(文字等)が入力された場合は整数を入力して下さいというメッセージにとばすプログラムを作りたいのですがどうも作り方が良く分からず困っています、いったいどのように作れば良いでしょうか?? 宜しくお願いいたします!

  • C言語

    C言語初心者です。 整数を入力しその数が偶数ならプログラムを終了する。奇数ならそれが3の倍数か3の倍数でないかを表示する。入力した数が奇数ならこの操作を何回も繰り返すプログラムを作りたいです。 このプログラムのソースを教えてください。

  • 文字列の操作

    はじめまして。 C言語のポインタを使った操作のように JavaScriptでも文字列の一文字一文字を配列に格納していくことはできますか? よろしくお願いします。

  • C言語とCGIによるおみくじの製作

    初投稿になります。 私は現在C言語とCGIを使ったWebおみくじを作っています。 内容としては、入力フォームに入力された氏名、生年月日、性別の文字列を受け取り、それを整数に変換します。 そして変換された整数を計算することで20種類ほどの結果を返したいと考えています。 しかし、C言語によるCGIはperlなどのように資料が多くないため、あまり似たような構成のプログラムがなくあまり理解できていません。 Googleなどでc cgi などで検索して、見ることができるものは全て見ましたが、やはり理解できていない現状です。 特に、フォームに入力されたデータをcgiプログラムでどう受けるのか、また受け取った文字列をどうやって整数に変換するのかが分かりません。 もし、わかる方がいましたら、よろしければご教授願います。 また、コンパイルはgccで行っています。

    • ベストアンサー
    • CGI
  • C言語で全角文字を扱いたいのですが、

    C言語で全角文字を扱いたいのですが、 全角文字列を入力して特定の箇所の文字(例えば3文字目)を抜き出して、表示するという感じのプログラムをしたいのですが、うまくいきません。 半角文字ならば、配列を使ってできるのですが・・・・・

  • C言語で取得した文字列を、C++の文字列として取り扱いたいです。

    C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • C言語で整数を文字列へ型変換

    C言語で整数を文字列へ型変換 int result[11]; const char *tmp; resultの中の11個の数字を 1,2,3,4,5,6,7,8,9,10,11 のような文字列にして、tmpへ代入したんですが、やり方が分かりません。 Cの初心者ですので、教えていただきたいです。

  • C言語

    課題なんですが、C言語で 「文字列と正数nをキーボードから入力して、1行n文字で改行するプログラム」 をつくりたいのですが、わかりません。どうすればよいのですか?

  • Cで文字列の分割

    ある文字列を5文字ずつ抜き出だすC言語のプログラムを作りたいのですが, なかなか苦戦しています. どなたかご教授頂けるとたすかります. ちなみに,使っているデータ国土地理院発行の火山10mメッシュデータで,こんな感じです・・・ -9999-9999-9999-9999 1255 1259 1257 1252 1245 1238 1231 1224 1218 1メッシュが整数値5文字で表されており,それが1000個横に並んでいます.全てのメッシュの間にスペースがあれば楽なのですが,それがない時もあります・・・ よろしくお願いします.

専門家に質問してみよう