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

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

ただいまの
回答率

91.36%

  • C

    2537questions

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

C言語 ポインタ 文字列

解決済

回答 2

投稿 2017/12/05 00:10

  • 評価
  • クリップ 2
  • VIEW 190

netai

score 5

文字列 sの中にある文字 na0を全て na1 に変更する関数 void meChar(char *s, char na0, char na1);
を作成する。その上でまず,作成したmeChar()関数を用いて,名前のMichaelの a を u に置き換えるプログラムを作成する。

//?????????? の部分をどうすればいいか分かりません。

該当のソースコード

#include <stdio.h>
void meChar(char *s, char na0, char na1);

int main(void) {
    char name[ ] = "Michae";

    printf("%s\n", name);
    replaceChar(name);
    printf("%s\n", name);
    return 0;
}

void meChar(char *s, char na0, char na1) {
    int i = 0;
    while (s[i]!='\0'){
    //?????????????????
        }
        i++;
    }
    return;
}

さらに

meCharの関数を用いて、Michae aをuに,uをoに,oをaに、順にではな、く同時に置き換えてから表示するプログラムを作成する。

お願いします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • showkit

    2017/12/05 08:08

    学校か何かの課題ですか? replaceChar と meChar の関連がわかりませんが、意図的なものですか?

    キャンセル

  • m_yoko

    2017/12/05 10:28

    元々の文字列をaをuに、uをoに、oをaにするのですか?普通に置換するとaとuとoがaに置換されます。

    キャンセル

  • m_yoko

    2017/12/05 10:31

    aをuに、uをoに、oをaにするのはna0からna1の変数は使わないのですか?説明が足りなすぎてよくわかりません

    キャンセル

  • 退会済みユーザー

    2017/12/06 09:28

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

0

「na0を全て na1 に変更」は nob. さんのお答えで良いと思います。

aをuに,uをoに,oをaに、順にではなく同時に置き換えて

は、こういう意味ではないでしょうか。

    while (s[i] != '\0') {
        switch (s[i]) {  // 置換えが必要な文字なら、置換える
        case 'a': s[i] = 'u'; break;  // a なら u に
        case 'u': s[i] = 'o'; break;
        case 'o': s[i] = 'a'; break;
        }
        i++;             // 次の位置に移動する
    }


switch 〜 case 文を使ったのは、行数を少なくでき、且つ、ロジックが明確になると思うからですが、質問者は一旦 if 〜 else if 〜 else if 〜 の構文に書き換えて見たら良いと思います。

提示されたプログラムには複数の問題が見当たります。特に、meChar() と replaceChar() の関係が不明確(実は同じ名前だろうか?)なので、????の部分だけ書き換えてもコンパイルは通りません。問題を正しく書き写せていないのでしょう。自分が機械になったつもりで、細部までキチンと目を配る注意力が、初心者には特に必要です。一文字違っただけで、プログラムは動かせませんから。

投稿 2017/12/05 17:22

編集 2017/12/05 17:39

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/08 01:28

    回答ありがとうございます。
    replaceChar()はミスです。ごめんなさい。

    キャンセル

0

文字通り「na0を全て na1 に変更」すればいいのでは?

if (s[i] == na0) {
      s[i] = na1;
}


じゃだめなんですか?
理由を教えて下さい。

後半の質問は意味が分かりません。「同時」とはどういうことを意味しているのでしょう?
meChar()は一種類の文字しか変更できないはずですが?

投稿 2017/12/05 11:01

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/08 01:26

    ありがとうございます。この方法でできました。
    同時は一回の変更でa i u e o すべて変更するという意味です。

    キャンセル

  • 2017/12/08 10:20

    「順にではなく」の意味が分からないのです。
    コンピューターは同時には一つの動作しかできません。例えば、「a を uに置き換える」そのあとで「u を o に置き換える」と言うことは当然できます。
    が、「a を uに置き換える」と「u を o に置き換える」を同時に実行することはできません。普通(cとかjavaとか)のプログラムは「同時に置き換える」ということを記述する方法がありません。
    ひょっとして「同時」は次のようなことを意味しているのでしょうか?
    「a -> u」と「u -> o 」の置き換えをするのだけれど、一旦「a -> u」として置き換えられたuをさらにoに置き換えることはしない。oに置き換えるのは最初からuだったもののみである。(つまり、rubato6809さんの回答にあるように)
    こういうことをしたいのでしょうか?

    キャンセル

  • 2017/12/08 10:27

    そのとりです。
    わかりにくくて申し訳ありません。;;

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • C

    2537questions

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