ページ 11

getlineについて

Posted: 2009年12月26日(土) 12:43
by toto
いつもお世話になっています。

C++を使ってプログラムを作っています。
インターネットとかで参考にしたソースに
std::getline(std::cin, str);というものがありました。
string strで定義されています。
getline関数からchar型の変数aに代入したいんですが
stringとcharは互換性がないためかエラーが出てしまいます。
error C2440:'char *' から 'std::string' に変換できません。

何か方法はないでしょうか?
char moji[100];
std::string str;
printf("入力してください>>");
    std::getline(std::cin, str); //変換ができないため2回同じものを入力する状態になっている
    scanf("%s",moji);
         std::cout << "数字:";
        c=std::count_if(str.begin(), str.end(), is(&std::isdigit));
        printf("%d個\n",c);
{
    while(moji!='\0'){
        if(moji[i-1]==moji){
            if(sw==0){
                printf("出力:%c%cが1つあります\n",moji[i-1],moji[i-1]); 
                sw=1;
            }
        }
        else{
            if(sw==1)
                sw=0;
        }
        i++;
    }}


ex.
入力してください>>888
888           //←1回だけ入力する方法はないでしょうか?説明下手ですいません…
数字:3個
出力:88が一つあります

Re:getlineについて

Posted: 2009年12月26日(土) 12:59
by たかぎ
> getline関数からchar型の変数aに代入したいんですが

よくわかりませんが、こういうことでしょうか?
std::cin.getline(&a, 1);
ただし、この場合だと、エラーチェックが面倒になりますよ。

Re:getlineについて

Posted: 2009年12月26日(土) 13:12
by toto
std::cin.getline(&a, 1);ですか?
エラーがいっぱいでてきました。

std::getline(std::cin, str);の値を
printfで出力は可能ですか?
printf("%s",str);のような感じで…

Re:getlineについて

Posted: 2009年12月26日(土) 13:15
by たいちう
printf("%s", str.c_str());

Re:getlineについて

Posted: 2009年12月26日(土) 13:18
by たかぎ
失礼。std::cin.getline(&a, 1);だとナル文字しか入りませんね。
ただ、エラーがいっぱいでるというのがよくわかりません。
それと、getlineでchar型の変数に直接値を読み込むのは無理かと思います。

> printf("%s",str);のような感じで…

strはstd::stringでしょうか?
それなら、
std::printf("%s", str.c_str());
とすればできます。

Re:getlineについて

Posted: 2009年12月26日(土) 13:20
by toto
できました!
printf("%s", str.c_str());とは意味的にはどんな感じなんでしょう?

Re:getlineについて

Posted: 2009年12月26日(土) 17:55
by toto
char a[100];
std::string str;

printf("入力してください>>");
std::getline(std::cin, str);
printf("%s\n", str.c_str());
a=str.c_str();

std::getline(std::cin, str);に入力されたものを
printf("%s\n", str.c_str());で出力できるようにはなりました。
このstr.c_str();を、aに代入したいので
a=str.c_str(); という形で組むと
error C2440: '=' : 'const char *' から 'char [100]' に変換できません。というエラーが出ます。

Re:getlineについて

Posted: 2009年12月26日(土) 18:23
by pooka
>a=str.c_str();
std::strcpy(a,&#160;str.c_str());
としてみてください。

Re:getlineについて

Posted: 2009年12月27日(日) 02:41
by toto
できました!!
ありがとうございます。
std::strcpyで(a, str.c_str()); という表現があるんですね。

RyuJin.slnが実行できない

Posted: 2010年1月04日(月) 23:42
by KAO
初歩的な質問で申し訳ありません。
 
龍神録プログラミングの館の第1章で、オブジェクトをダウンロードし、1章のフォルダの中にあるRyuJin.slnを実行してみたのですが、その際に、Visual Studio 変換ウィザードと書かれたウインドウが開き、以下のメッセージが表示されました。

「現在開いているソリューションまたはプロジェクトは旧バージョンのVisual Studioで作成されたものです。このバージョンで使用される形式に変換してください。」

「次へ」のボタンを押すと「変換準備完了」と表示されたのですが、「完了」のボタンを押すと、さらに以下のメッセージが表示され、結局RyuJin.slnは実行できませんでした。

「ソリューションファイル
 'C:\Users\kaoru\AppData\Local\Temp\Temp1_project.zip\project\1章\Ryujin.slh'は変更できないため、このファイルを変換できません。このソリューションを変換するためには、ソリューションファイルのアクセス許可を変更して、ファイルを変更したり開いたりできるようにしてください。」
    


どのようにすれば、RyuJin.slnが実行できるようになるのか教えてもらえると大変助かります。


環境  
  OS : Windows7
  コンパイラ名 : VC++ 2008Express Edition

Re:RyuJin.slnが実行できない

Posted: 2010年1月04日(月) 23:53
by SooA
>Temp1_project.zip
zipファイルは圧縮されたファイルですので
解凍してから使用しましょう。

Re:RyuJin.slnが実行できない

Posted: 2010年1月05日(火) 00:46
by KAO
解凍したら実行できました。
本当ありがとうございます。