プロが教えるわが家の防犯対策術!

C言語超初心者です。学校の課題で次のような問題が出されました。

・問題・
次に挙げる縛りに沿い、以下の関数とメイン関数を作り、処理結果を画面に作成しなさい。

char *tst(char *str)

・strの中の文字列も小文字を大文字に変換し、変換した文字列が格納されているchar *に返す。

・引数strの中の文字列は受け取った状態で手を加えない。

・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。

・malloc関数を使用する。

----------------------------------------------------------------------------------


大文字に変換するには

while(*str != '\0') {

if(*str >= 'a' && *str <= 'z') {

*str -= 'a'- 'A';
}
++str;
}

というのは分かったのですがここから何をすするか全く分かりません。初心者なのでなるべく分かりやすく教えてもらえると有難いです。

お願いします。

A 回答 (6件)

>というのは分かったのですがここから何をすするか全く分かりません。



 というのが分かって、「ここから何をすするか全く分かりません」てのは、ヘン。


過去の「質問」を検索(「大文字に変換」、「malloc」)して、作ってみました。

>小文字を大文字に変換

 http://oshiete.goo.ne.jp/qa/3295844.html

 #7 さんの「素直に標準関数(touuper)を使うのが吉」を採用。

>malloc関数を使用する。

 http://oshiete.goo.ne.jp/qa/5651516.html

 ここの確保量 200 の代わりに、strlen( str ) を使用。

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

char *tst( char *str )
{
 int iLen;
 char *cap;

 iLen = strlen( str );

 cap = (char *)malloc( iLen + 1 );

 if( NULL == cap ){ // ここ、「課題」なら必要かも
  fprintf( stderr, "メモリ確保失敗" );
  exit( 9 );
 }
 while( *str ){

  *cap = toupper( *str );

  cap++;
  str++;
 }
 *cap = '\0'; // 文字列終端

 return( cap - iLen );
}
int main()
{
 char *ans;
 char str[ 64 ] = "htTp://okwaVe.jp/QA/q5651516.html";

 ans = tst( str );

 printf( "%s\n", str );
 printf( "%s\n", ans );

 free( ans ); // 確保領域解放

 return( 0 );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
    • good
    • 0

iLen は int ではなく size_t の方がよろしいかと>#5. あと, 「関数内で exit」はきれいじゃない. そこは

return 0; の方が便利じゃないかな.
    • good
    • 0

まずは文字コード表を見て文字の並び方を学ぶとよいと思います。

    • good
    • 0

あと余談だけど


if(*str >= 'a' && *str <= 'z') {
*str -= 'a'- 'A';
}
は全然ダメ. 問題外と言ってもいい.

文字コードに関する指定が全くされていない以上, 「どんな文字コードでも動く」ようにしなきゃ.
    • good
    • 0

>・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。


>・malloc関数を使用する。

ここは、どういうソースを書けばいいかわかりますか?
後ろの項目は前の項目に含まれますので、

>・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。

ここだけを考えればいいですね。

この回答への補足

そうです!!

説明が悪くてすみません。

補足日時:2011/02/27 11:56
    • good
    • 0

それだと、str の指す文字列を変更してしまうからダメだよ。


「別の場所」に結果を格納するんだ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています