strchr関数の課題について

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

strchr関数の課題について

#1

投稿記事 by bucchus » 7年前

学校で、このような問題が出されました。
---------------------
<問>
次に示す文字列 "+-/*=)(@" を strchr関数を利用して指定された文字を検索し、
指定された文字が文字列の何番目の文字であるかを画面に表示する実行可能なプログラムを作成せよ。プログラムにおける番号の付与は0オリジンとする。

指定文字1番目 '+'
指定文字2番目 '-'
指定文字3番目 '/'
指定文字4番目 '*'
指定文字5番目 '('
指定文字6番目 ')'
指定文字7番目 '='
---------------------
ここまで。

strchr関数の使い方を理解し、プログラムをつくったところ
不明点が2つ出てきました。

1、+が0番目、-が1番目など、0オリジンと1つずつズレが生じてしまう。
C言語は0からはじまるため、問題文通りにするとこうなってしまいます。
"+-/*=)(@"の最初を" +-/*=)(@"などと半角スペースをあけると解決するのですが
これってアリなのでしょうか?

2、文字列"+-/*=)(@"と指定文字5番目~7番目までの順番がちがう
問題文の文字列"="")""("が指定文字列と対応していません。
これは、「その文字の順番をif文とかfor文などを用い変えなさい」という
趣旨なのでしょうか?

以上、よろしくお願いいたします。

コード:

 
#include <stdio.h>
#include <string.h>             /* strchr()に必要 */

int main(int argc,char *argv[])
{
  char str[] = "+-/*=)(@",*p;  
  int c;

  printf("検索文字を入力してください。\n");
  c = getchar();

  p = strchr(str, c);
  if(p != NULL){
    printf("%cは文字列の%d番目にあります。\n", c, p - str);
    printf("以降の文字列は%sです。\n",p);
  }
  else
    printf("%cは見つかりませんでした。\n,c");
  return 0;
}

box
記事: 2002
登録日時: 13年前

Re: strchr関数の課題について

#2

投稿記事 by box » 7年前

bucchus さんが書きました: "+-/*=)(@"の最初を" +-/*=)(@"などと半角スペースをあけると解決するのですが
これってアリなのでしょうか?
ダメでしょうね。
n番目の文字を「(n+1)番目の文字」として出力するのであれば、プログラムで工夫すればよいと思います。
bucchus さんが書きました: 2、文字列"+-/*=)(@"と指定文字5番目~7番目までの順番がちがう
問題文の文字列"="")""("が指定文字列と対応していません。
これは、「その文字の順番をif文とかfor文などを用い変えなさい」という
趣旨なのでしょうか?
問題文が間違っているような気がします。出題者に確認するのがよいでしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

bucchus2

Re: strchr関数の課題について

#3

投稿記事 by bucchus2 » 7年前

Boxさま

さっそくの返信ありがとうございます。
1.意図が理解できました。
2.聞いてみます。
ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る