C++でismbblead()が使えない

このQ&Aのポイント
  • C++でismbblead()が使えない。
  • C++のコンパイラでは、Cのメソッドであるismbblead()が使えない場合があります。
  • 今回の質問文章では、VS2013でismbblead()を使用しようとしたところ、コンパイルエラーが発生しました。エラーメッセージは「_ismbbleadが定義されていません」となっています。
回答を見る
  • ベストアンサー

C++でismbblead()が使えない。

http://www.orchid.co.jp/computer/cschool/kanji1.html 上記のサイトを参考にVS2013で以下のようなソースを書きました。 #include "stdafx.h" #include "stdio.h" int _tmain(int argc, _TCHAR* argv[]) { char *str = "123498765abcd漢字0000"; int i1; for (i1 = 0;;){ if (str[i1] == '\0')break; if (_ismbblead(str[i1])){ if (str[i1 + 1] == '\0'){ break; } putchar('['); putchar(str[i1++]); putchar(str[i1++]); putchar(']'); continue; } putchar(str[i1++]); } return 0; } 残念なことにコンパイルはとうらず、ismbbleadの部分が引っ掛かっているようでした。 C++だと使えないCのメソッドもあるのでしょうか? そういうわけでないのであればなぜ、コンパイルは通らないのでしょうか?C言語のコンパイラでは問題なく参考サイトのソースはコンパイルできました。 出ているエラーは IntelliSense: 識別子 "_ismbblead" が定義されていません error C3861: '_ismbblead': 識別子が見つかりませんでした というものでした。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#206655
noname#206655
回答No.1

私の場合は、ismbblead が定義されてるヘッダーをインクルードします。

satisfied999
質問者

お礼

ヘッダーが違っったのですね。ありがとうございました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.2

https://msdn.microsoft.com/ja-jp/library/vstudio/3hd1xf60(v=vs.120).aspx を参照してください。

satisfied999
質問者

お礼

ヘッダーが違っったのですね。ありがとうございました。

関連するQ&A

  • C言語のフローチャート

    昨日に引き続き失礼します。下記のプログラムを作成したのですがフローチャートは、どのように書けばいいのでしょうか? #include "stdafx.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { char ss[10] = "abcdefg"; char *ssp; ssp =ss; while (1){ if (*ssp ==0) break; printf("文字 *ssp=%c\n",*ssp); ++ssp;} int ary[10] = {1,2,3,4,5,6,7,8,9,10}; int *pt; pt = ary; while (1) { if (*pt == 10) break; printf("値 *pt=%d\n",*pt); ++pt;} return 0; }

  • 入力した文字列から母音だけを出力するプログラム

    文字列を入力し母音だけを出力するプログラムを作りました。 以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、switch文のcaseを増やすと冗長になってしまう気がします。 switch文以外の方法でもっと簡潔に書く方法はありますか?ご教授お願い致します。 /* 入力した文字列のうち、母音「a,i,u,e,o」だけ出力する */ #include <stdio.h> #include <string.h> #define MAXSTR 256 int main(void) { char str[MAXSTR]; int i; gets(str); for (i = 0; i < strlen(str); i++) switch (str[i]) { case 'a': putchar(str[i]); break; case 'i': putchar(str[i]); break; case 'u': putchar(str[i]); break; case 'e': putchar(str[i]); break; case 'o': putchar(str[i]); break; } putchar('\n'); return 0; } 実行結果: What time is it now? aieiio

  • 文字配列から数値への変換

    MicrosoftのVisual-Studio 2005を使っています。 C/C++については、ほぼ素人で、困っています。 下記のような簡単なソースで、 456 012 678 を表示するようにしたいのですが、できなくて困っています。 最初の 123 789 345 は下記のソースで表記できたのですが、どうすればよいの でしょう? 数値をわざと文字列で読み込んで、これを 数値に変換しているのでややこしいのかもしれませんが、 できればこれでやりたいので、申し訳ありませんが、教えていただ けないのでしょうか。よろしくお願いします。 #include "stdafx.h" #include "stdlib.h" char str[3][200] = { "123 456", "789 012", "345 678" }; int _tmain(int argc, _TCHAR* argv[]) { int a[10]; for (argc = 0; argc < 3; argc++){ a[argc] = atof(str[argc]); printf("%d\n", a[argc]); }; return 0; }

  • C言語

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。考えたのですが、分かりません。(コンパイルエラーです。)教えてください。宜しくお願いします。#include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

  • C言語 文字列の操作

    文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

  • 文字列を関数に渡すぷろぐらむなのですがおかしいです。

    <ソース> #include<stdio.h> #include<stdlib.h> void str(char a[]); int main() { char st[10]="abcde"; str(st); str("ABCabc123"); return 0; } void str(char a[]) { int i; printf("%s\n",a); i=0; while(a[i]){ a[i]=toupper(a[i]); putchar(a[i]); i++; } putchar('\n'); } 分からないところがあるので質問します。 toupperは、大文字にするんですよね。 putcharは、基本的にchar型でしたっけ? putsとgetsは、int型でしたっけ? 後、プログラムが暴走してます。 どこがおかしいんでしょう?

  • C言語

    入力した文字列と文字列'x'を受け取り、'x'の位置のポインタを返すのですが、例えば、saxcvと入力すると、xcvと表示されるのですが、このソースだと、saxcvと全部表示されてしまいます。分からないので、教えてください。宜しくお願いします。 #include <stdio.h> char *a(char *sew) { char *p=sew; while (*sew != 'x') { sew++; } return(p); } int main(void) { char str[21] ={'\0'}; int i=0,no=0; char ch; printf("文字を入力してください:"); while (i<21) { ch=getchar(); if (ch=='\n') {break;} else if (ch != '\0' && ch != '\0') { str[i] =ch; i++; } } for(i=0; i<20; i++) { if(str[i]=='x') { printf("'x'以降は%sです。\n", a(str)); no=1; break; } } if (no==0) printf("'x'は見つかりませんでした。"); return (0); }

  • C言語 自然数の四則演算 エラー原因不明

    プログラミング初心者です 自然数の四則演算のプログラムを作ったところ コンパイル時にはエラーは起こりませんでしたが実行時にエラーが起こり、動作が停止してしまいました。 自分で原因が特定できなかったのでこちらを頼らせてもらうことにしました。 ご教授お願いします。 <環境> Windows 7 Home Premium 64-bit Visual Studio 2013 #include<stdio.h> #include<ctype.h> #include<stdlib.h> int main( void ) { char str[2][128]={{0}}; int i,j,err=0,cont=0,wari=0; double c,d,dans; long a,b,lans; puts("自然数の四則演算('+''-''*''/')を計算"); //被加数,被減数,被乗数,被除数と演算の判定 i=0; while((str[0][i]=getchar())!='\n'){ if(str[0][0]=='+' || str[0][0]=='*' || str[0][0]=='/' || str[0][0]=='-'){ err=1; } if(str[0][i]=='+' || str[0][i]=='*' || str[0][i]=='/' || str[0][i]=='-'){ cont=1; //2つ目の数字を読み込むか否かの判定 break; }else if(isdigit(str[0][i])==0){ err=1; //数字と演算方法以外の入力はエラー } i++; } //加数,減数,乗数,除数の判定 if(cont==1 && err!=1){ j=0; while(str[1][j]!='\n'){ if(isdigit(str[0][i])==0){ err=1; //数字以外の入力があればエラー } j++; } str[1][j]='\0'; if(err==1){ printf("エラー入力"); return 0; } switch(str[0][i]){ case '+': str[0][i]='\0'; a=atol(str[0]); b=atol(str[1]); lans=a+b; break; case '-': str[0][i]='\0'; a=atol(str[0]); b=atol(str[1]); lans=a-b; break; case '*': str[0][i]='\0'; a=atol(str[0]); b=atol(str[1]); lans=a*b; break; case '/': str[0][i]='\0'; c=atol(str[0]); d=atol(str[1]); dans=(double)c/d; wari=1; //割り算の判定 break; default: break; } } if(err==0){ if(wari==0){ printf("計算結果:%ld\n",lans); }else if(wari==1){ printf("計算結果:%f\n",dans); } }else{ printf("エラー入力です\n"); } return 0; }

  • [C]char型のダブルポインタ

    粗雑で申し訳ありませんが、 以下のソースをコンパイルできましたが、 うまく実行できません。 自分なりに間違いがないと思うのですが、 間違い等をご指摘頂ければ助かります。 #include <stdio.h> void func(char **ptr) ptr[][10] か (*ptr)[] なら通る *ptr[] は通らない { printf("----- func -----"); printf("%s\n", *ptr); printf("%c\n", **ptr); putchar('\n'); } int main(void) { char str[5][10] = {"AAAAA", *str[] にすると func で **ptr で通る "BBBBB", "CCCCC", "DDDDD", "EEEEE", }; printf("----- main -----"); printf("%s\n", *str); printf("%c\n", **str); putchar('\n'); func(str); return (0); } 実行結果 ----- main ----- AAAAA A ----- func ----- Bus error (core dump) 関数への受け渡しで、型が違うというお叱りを受けますが、 コンパイルはできました。 コンパイラはCCです。 ではよろしくお願いします。

  • cではよくてc++ではダメな理由

    #include <stdio.h> #include <stdlib.h> int main(void) { int *x; x = calloc(1, sizeof(int)); if (x == NULL) puts("記憶域の確保に失敗しました。"); else{ *x = 57; printf("*x = %d\n", *x); free(x); } return 0; } 上のソースなのですがcallocの戻り値がvoidなのでintにはキャストしてくれみたいなことを コンパイラに言われます。 cではコンパイルできてc++ではコンパイルできないのはなぜでしょう。

専門家に質問してみよう