
Case 1
Text9.Text = "AB";
Text10.Text = "A"; // 1文字目
Text11.Text = "B"; // 2文字目
case 2;
Text9.Text = "Ab";
Text10.Text = "A";
Text11.Text = "b";
case 3;
Text9.Text = "aB";
Text10.Text = "a";
Text11.Text = "B";
case 4;
Text9.Text = "ab";
Text10.Text = "a";
Text11.Text = "b";
上記のようなCase 文を C を使って作成したいのですが,
A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき,
1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが,
'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください.
#include <stdio.h>
#define MAX_NAME 256
int main(void)
{
const char *NAME12 = "Text9";
const char *NAME1 = "Text10";
const char *NAME2 = "Text11";
const char *ALPH = "ABCDEFGHIJabcdefghij";
FILE *fp = NULL;
char f_name[MAX_NAME];
int count = 0;
char *p = ALPH;
char *q = ALPH;
printf("ファイル名:");
scanf("%s", f_name);
fp = fopen(f_name, "w");
if (fp == NULL) {
printf("'%s':ファイルが見つかりません\n", f_name);
} else {
for (p = ALPH; *p != '\0'; p++) {
for (q = ALPH; *q != '\0'; q++) {
if (*p != *q) {
count++;
fprintf(fp, "Case %d\n", count);
fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q);
fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q);
fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q);
}
}
}
fclose(fp);
}
return 0;
}
No.3ベストアンサー
- 回答日時:
★回答者 No.2 さんと同じです。
・『const char *』型と『char *』型のタイプを合わせます。
・つまり、
const char *ALPH = "ABCDEFGHIJabcdefghij";
const char *p = ALPH;
const char *q = ALPH;
・とするか、
char *ALPH = "ABCDEFGHIJabcdefghij";
char *p = ALPH;
char *q = ALPH;
・とします。
・また、ちょっと間違いがあるので指摘します。
・『fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q);』は、
『fprintf(fp, "%s.Text = \"%c\"\n", NAME1, *p );』です。
・『fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q);』は、
『fprintf(fp, "%s.Text = \"%c\"\n", NAME2, *q);』になります。
・以上。分かりますか?
●小言
・このプログラムで出力されるCソースを、何かの処理ルーチンとして使うのですか?
・もっと良い方法がありますけど。→文字列を動的に作成する方法はどうでしょう。
・以下にサンプルを載せておきます。→処理速度は少し落ちます。ループしているので。
●サンプル
void MakeString( int num, const char **text9, const char **text10, const char **text11 )
{
static char buff9[ 4 ], buff10[ 4 ], buff11[ 4 ];
static const char *ALPH = "ABCDEFGHIJabcdefghij";
const char *p = ALPH;
const char *q = ALPH;
for ( p = ALPH ; *p != '\0' ; p++ ){
for ( q = ALPH ; *q != '\0' ; q++ ){
if ( *p != *q ){
if ( --num <= 0 ){
*text9 = buff9; sprintf( buff9, "%c%c", *p, *q );
*text10 = buff10; sprintf( buff10, "%c", *p );
*text11 = buff11; sprintf( buff11, "%c", *q );
return;
}
}
}
}
}
●使用例
const char *Text9;
const char *Text10;
const char *Text11;
MakeString( 123, &Text9, &Text10, &Text11 );
・以上。おわり。
No.2
- 回答日時:
VisualC++のコンパイラでコンパイルしたら
その部分はWarningにはなりましたがErrorではなかったです。
C++ならErrorなのでC++としてコンパイルしたのかな?
修正ですが、
> char *p = ALPH;
> char *q = ALPH;
を
const char *p = ALPH;
const char *q = ALPH;
と直せば良さそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ncursesで...
-
charからLPTSTRへの変換方法
-
'const char *' 型は 'char *' ...
-
CStringをwchar_tに変換したい
-
ftoa の作り方
-
strncpyと_tcsncpy_sのヌルの扱...
-
PING JPEGファイルのExif規格の...
-
c#でbmp画像の上下反転
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
-
C言語のfor文です。 繰り返しの...
-
WORDをcharに変換する方法
-
c言語プログラミング実行時エラ...
-
int main()の・・・
-
fgetsなどのときのstdinのバッ...
-
pingの結果を取得する方法
-
ソケット通信で大容量のメール...
-
文字型変換
-
VB6のAscB関数をC++で書き換えたい
-
C言語、リダイレクト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
文字列から空白を取り除きたい...
-
テキストデータをそのままバイ...
-
2曲同時再生するにはどうした...
-
配列をnビットシフトする
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
間接参照のレベルが異なっています
-
charでの計算?
-
c言語プログラミング実行時エラ...
-
double型の値をchar配列に変換...
-
str系関数を使わずに二つの文字...
-
間接操作のレベルとは
-
3桁区切(コンマ)記号をつけ...
-
iconv_open失敗
-
【C言語】構造体内の領域解放(...
-
ftoa の作り方
おすすめ情報