

C言語超初心者です。学校の課題で次のような問題が出されました。
・問題・
次に挙げる縛りに沿い、以下の関数とメイン関数を作り、処理結果を画面に作成しなさい。
char *tst(char *str)
・strの中の文字列も小文字を大文字に変換し、変換した文字列が格納されているchar *に返す。
・引数strの中の文字列は受け取った状態で手を加えない。
・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。
・malloc関数を使用する。
----------------------------------------------------------------------------------
大文字に変換するには
while(*str != '\0') {
if(*str >= 'a' && *str <= 'z') {
*str -= 'a'- 'A';
}
++str;
}
というのは分かったのですがここから何をすするか全く分かりません。初心者なのでなるべく分かりやすく教えてもらえると有難いです。
お願いします。
No.5ベストアンサー
- 回答日時:
>というのは分かったのですがここから何をすするか全く分かりません。
というのが分かって、「ここから何をすするか全く分かりません」てのは、ヘン。
過去の「質問」を検索(「大文字に変換」、「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 );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
No.6
- 回答日時:
iLen は int ではなく size_t の方がよろしいかと>#5. あと, 「関数内で exit」はきれいじゃない. そこは
return 0; の方が便利じゃないかな.No.3
- 回答日時:
あと余談だけど
if(*str >= 'a' && *str <= 'z') {
*str -= 'a'- 'A';
}
は全然ダメ. 問題外と言ってもいい.
文字コードに関する指定が全くされていない以上, 「どんな文字コードでも動く」ようにしなきゃ.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のintとcharの違いってな...
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
配列やポインタに文字列を設定...
-
2次元配列の文字"列"の初期化方法
-
char型にint型の数値を代入する。
-
DWORDとcharの変換
-
char 文字列型 の表現範囲が-12...
-
fgetsで読み込んだ値のvector処理
-
fscanfの書式について
-
new charとnew char[N]の違いは?
-
構造体・ビットフィールドのvol...
-
SubStringの使い方について
-
バイト型データの参照
-
SetWindowTextについて。
-
isalpha()関数について
-
しつこい様ですが、再度ポイン...
-
ポインタ配列
-
文字列のswap
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
DWORDとcharの変換
-
C++17で、unsigned char * 配列...
-
char 文字列型 の表現範囲が-12...
-
new charとnew char[N]の違いは?
-
char型にint型の数値を代入する。
-
動的メモリの初期化方法について。
-
小数点入りの文字列をfloat型に...
-
文字型配列に格納した空白の切捨て
-
fstream型オブジェクトを関数の...
-
C++Builder 2009 テキスト...
-
文字列の途中から途中までを抽出
-
C言語の文字リテラル中の16進文...
-
エクセルのMID関数は、C言語では?
-
文字列のswap
-
void型へのポインタ
-
VC++ char[10]へのCString値の代入
おすすめ情報