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

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

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

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

Q&A

解決済

2回答

218閲覧

C言語 ポインタ 文字列

ryo_py

総合スコア25

C

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

0グッド

2クリップ

投稿2017/12/04 15:10

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

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

###該当のソースコード

C

1#include <stdio.h> 2void meChar(char *s, char na0, char na1); 3 4int main(void) { 5 char name[ ] = "Michae"; 6 7 printf("%s\n", name); 8 replaceChar(name); 9 printf("%s\n", name); 10 return 0; 11} 12 13void meChar(char *s, char na0, char na1) { 14 int i = 0; 15 while (s[i]!='\0'){ 16 //????????????????? 17 } 18 i++; 19 } 20 return; 21} 22

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

お願いします

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

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

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

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

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

showkit

2017/12/04 23:08

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

2017/12/05 01:28

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

2017/12/05 01:31

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

回答2

0

ベストアンサー

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

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

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

C

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

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

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

投稿2017/12/05 08:22

編集2017/12/05 08:39
rubato6809

総合スコア1380

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

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

ryo_py

2017/12/07 16:28

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

0

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

c

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

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

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

投稿2017/12/05 02:01

nob.

総合スコア711

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

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

ryo_py

2017/12/07 16:26

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

2017/12/08 01:20

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

2017/12/08 01:27

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問