ここから本文です

#include<stdio.h>

kyj********さん

2017/6/1115:32:02

#include<stdio.h>

char oomoji(char c)
{
int i;
char str[1000];
for(i=0;str[i]!=0;i++)
{
if(i==0)
{
return (c-32);
}
else
{
if(str[i-1]==' ')
{
return (c-32);
}
{
return c;
}
}
}
}

int main(void)
{
char a[]="this is amazing.";
oomoji(a);
printf("%s",a);

return 0;
}
文字列内の文字の初めを大文字変換したいです。
コンパイルできません。
どこがまちがっていますか?
ポインタ変数はまだ習ってないです。
助けてください。

閲覧数:
75
回答数:
6
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2017/6/1115:59:34

少し変えますよ。


(1)2行目

【変更前】char oomoji(char c)
【変更後】void oomoji(char str[])

呼び出す方は文字の配列を渡しています。char じゃないですよね。char [] です。


(2)5行目

【変更前】char str[1000];
【変更後】char c;

別に配列を用意する必要は無いですよ。代わりに処理中の文字を表す c を用意しましょう。(無くても良かったのですが)


(3)6行目

【変更前】for(i=0;str[i]!=0;i++)
【変更後】for(i=0;(c = str[i])!=0;i++)

もともままでも良かったのですが、ここで c に str[i] を代入するものとします。


(4)10行目

【変更前】return (c-32);
【変更後】str[i] = c-32;

return は for 文に関係なく終了となります。ここでいきなり終わってしまうとまずいですよね。そうじゃなくて、c - 32 の計算結果を str[i] に書き戻す処理が必要となります。


(5)16行目

【変更前】return (c-32);
【変更後】str[i] = (c-32);

同じくです。


(6)19行目

【変更前】return c;
【変更後】/*return c;*/

ここは処理不要となります。

ベストアンサー以外の回答

1〜5件/5件中

並び替え:回答日時の
新しい順
|古い順

apr********さん

2017/6/1304:50:17

/*
2017/6/11 15:32:02

文字列内の文字の初めを大文字変換したいです。
コンパイルできません。
どこがまちがっていますか?
ポインタ変数はまだ習ってないです。
助けてください。

>先着の回答者様からのアドバイスを正しく御検討後、
_下記ソースを御試し下さい。
*/
#include<stdio.h>

// 文字列c内の初めの文字を大文字変換
char oomoji(char c[]){
_if('a'<=c[0] && c[0]<='z')_c[0]=c[0]+'A'-'a';
_return c[0];
}

int main(void){
_char a[]="this is amazing.";
_oomoji(a);
_printf("%s",a);
_
_printf("\n# 正常終了 #\n");
_return 0;
}
/* 実行出力:console
This is amazing.
# 正常終了 #
続行するには何かキーを押してください . . .
*/

プロフィール画像

カテゴリマスター

編集あり2017/6/1115:54:51

何か、やってみると
あちこち変です。
全部直しました。

#include<stdio.h>

char *oomoji(char *c)
{
int i;
for(i=0;c[i];i++)
{
if(i==0)
{
c[i]=c[i]-32;
}
else if(c[i-1]==' ')
{
c[i]=c[i]-32;
}
}
return c;
}

int main(void)
{
char a[]="this is amazing.";
oomoji(a);
printf("%s\n",a);
return 0;
}

has********さん

2017/6/1115:49:51

コンパイルエラーを直せばよいという訳ではないようです。
関数oomojiは1文字だけ変換するような感じで作られていますけど、for文で繰り返し演算を行っているようです。
つまり、関数oomojiは1文字だけが対象なのか、文字列全体が対象なのかはっきりしないというところに問題があります。
更に関数oomoji内にstrという自動変数がありますけど、誰も中身を設定していないのに関数内部ではそれを参照しているという問題もあります。
頭の中をクリアにして作り直してみてください。

mak********さん

2017/6/1115:48:49

間違っているのは、関数oomojiにa配列の先頭ポインタを渡そうとしているところです。
ポインタ習ってないとのことですし、関数oomojiはもともと1文字ずつ変換のようですので、a配列を1文字ずつ渡せばいいです。

>oomoji(a);
>printf("%s",a);

for( int i=0; i<sizeof(a); i++ )
{
printf("%c",oomoji(a[i]) );

}
printf("\n");

追伸:
最後の.も変換しようとしちゃってますが、
a-zのコードのみ対象とするガードが、関数大文字に必要かもしれませんね。

プロフィール画像

カテゴリマスター

mak********さん

2017/6/1115:47:28

oomoji関数内で未初期化のローカル変数char str[1000]に対して処理を行っていることが全く無意味です。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる