• ベストアンサー

Visual C++の簡単なプログラムについて

Visual C++で以下のようなプログラムまたは関数を作りたいのでアルゴリズムもしくはヒントを教えてください。 (1) 入力された文字列の文字数を算出するプログラム (2) 『abc』→『abcabc』のように引数として受け取った文字列を2回繰り返した文字列に変換する関数

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

  • ベストアンサー
  • SHJYOR
  • ベストアンサー率35% (7/20)
回答No.5

(1) 入力された文字列の文字数を算出するプログラム strlen( str )ではだめなのですか? (2) 『abc』→『abcabc』のように引数として受け取った文字列を2回繰り返した文字列に変換する関数 strcat(strcpy(new_str, str), str)ではだめですか? そういうことではないのかなぁ? はずしていたらごめんなさい。

s-t-a-r
質問者

お礼

このような関数があることを知り、大変参考になりました!どうもありがとうございます。

その他の回答 (4)

回答No.4

> 文字列を1文字ずつ調べていって、NULL ('\0') を見つけたら > ループから抜けるようにするだけです。 '\0' と NULL は別物です。 '\0'は文字、 NULLはポインタ。混同せぬよう。

s-t-a-r
質問者

お礼

'\0' と NULL は別物なんですね!勉強になりました。ありがとうございます。

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 (1) 文字数のカウントプログラム   strlen 関数が使えますが、練習を兼ねて自作してみてはいかがでしょう?   文字列を先頭から1文字ずつ調べていって、NULL ('\0') を見つけた   時点でループから抜けるようにするだけです。 (2) 文字列を繰り返すプログラム   strcat で文字列を連結するか、sprintf(buff, "%s%s", str, str)   とするのが簡単です。

s-t-a-r
質問者

お礼

良きアドバイスありがとうございました!

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 (1) 文字数の算出は、strlen 関数が使えますが、練習も兼ねて自作しては   どうでしょう?   文字列を1文字ずつ調べていって、NULL ('\0') を見つけたら   ループから抜けるようにするだけです。 (2) str 引数で受け取ったとして、printf(%s%s\n", str, str);   とすれば目的の動きになると思います。

回答No.1

(1) 入力された文字列の文字数を算出するプログラム 文字列の先頭から'\0'が現れるまでの文字数を勘定します。文字列のお尻には'\0'がありますから。 (2) 『abc』→『abcabc』のように引数として受け取った文字列を2回繰り返した文字列に変換する関数 上の応用。お尻の'\0'が見つかれば、そこに繋げばいい。

s-t-a-r
質問者

お礼

なるほど'\0'に着目すればいいのですね。どうもありがとうございました。

関連するQ&A

  • C++のプログラムを作って頂けませんか?

    ソースをこちらにお願い致します!全て別のプログラムです cin.getline()を使用すること。また、stringクラス及び標準ライブラリの文字列関連の関数は使用しないこと 一つ目。 文字を入力すると、文字列中のアルファベット大文字を小文字に変換するプログラム。入力できる文字数は最大80文字。 例 入力:ABcdEFgh 結果:abcdefgh 二つ目。 文字列を入力すると、文字を循環しているように見えるプログラム。入力できる文字数は最大80文字。 例 入力:Hello 結果: Hello elloH lloHe loHel oHell Hello 三つめ。 文字列を入力すると、文字が逆順になるプログラム。入力できる文字数を最大80文字とする。 例 入力:Hello 結果:olleH どなたかお願いします!

  • Visual C++ の使い方がわかりません。

    今プログラムをWindows上でVisual Cを使って書きました。 そして、 linux 上だと、引数を渡して実行する際、 testというプログラムをddddというchar文字を引数として実行したい場合、 >test dddd と、実行すればよかったと思うのですが、Visual Cでは、私は、上のメニューバーにある”実行”ボタンでしか実行の仕方をしりません。引数を渡して実行したい場合は、どうすればいいのでしょうか? 教えてください。

  • Visual C++

    超ド素人でVisual C++の入門本を開けたばかりなのですが、いきなりつまずいてしまいました。 本に書いてあるプログラムをコピーしてビルドしてもエラーが出ます。 「error C2664: 'lstrcpyW' : 1 番目の引数を 'char [80]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。」 と出ます。書籍はVC++5.0/6.0対応で、使っているのはVisual Studio2005のVC++です。バージョンが違うのでエラーが出るのでしょうか?

  • C言語 プログラム

    文字列a[]と文字列b[]があり、a[]に含まれるb[]の文字すべてを@に変更する関数mikan[]を教えてください。 また、関数mikan[]を用いて、2つの文字列a[]とb[](空白は含まない)を入力すると関数mikan[]によって変更されたa[]を表示するプログラムを教えてください。よろしくお願いします。 (例 a[] :"a+b+c=abc" b[] :"a=" 上記だったら a[] :"@+b+c@@bc"

  • c言語 プログラム

    文字列ringo[ ]、文字列mikan[ ]が与えられ(ringo[ ]とmikan[ ]は1以上の文字列が必ず入っているもの)、文字列ringo[ ]中に文字列mikan[ ]が含まれるときは最初にあらわれるその文字の先頭の位置(0~)を返し、含まれないときは-1を返す関数suikaのプログラムを教えてください。 また、その関数を用いて、2つの文字列ringo[ ]とmikan[ ](空白は含まない)を入力すると関数suikaの値を返すプログラムを教えてください。 (例1 ringo[ ]:abcdefghijklmn mikan[ ]:abc abcは0 (例2 ringo[ ]:abcdefghijklmn mikan[ ]:efghij efgは4 (例3 ringo[ ]:abcdefghijklmn mikan[ ]:xyz xyzは-1

  • Visual C++のサンプルプログラムを入力時

    Visual C++のサンプルプログラム(CD付属ソースから)を入力・コンパイル時のエラー すみません、教えてgoo初心者なもので、返信感覚で回答者にお礼を書いていたら再質問の順序等訳がわからなくなってしまったので新規に質問します。 前回質問:http://okwave.jp/qa/q6315455.html 猫でもわかるゲームプログラミングhttp://www.kumei.ne.jp/c_lang/index.htmlという本で勉強しようとしています。 本の巻末に書いてある通り、プロジェクトを新規作成でWindowsアプリケーション、空のプロジェクトで始め、サンプルのソースをコピー&ペーストで貼り付けたんですが、 1>new1.cpp 1>c:\documents and settings\REI\my documents\visual studio 2008\projects\new1\new1\new1.cpp(58) : error C2440: '=' : 'LPCSTR' から 'LPCWSTR' に変換できません。 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>c:\documents and settings\REI\my documents\visual studio 2008\projects\new1\new1\new1.cpp(85) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>ビルドログは "file://c:\Documents and Settings\REI\My Documents\Visual Studio 2008\Projects\new1\new1\Debug\BuildLog.htm" に保存されました。 1>new1 - エラー 2、警告 0 となります。すみません、ソースは文字数の関係でUPできないのですが、 これでは苦労してプログラム入力したとしても悉く実行できないってことですよね。 どなたか分かる方いましたらご回答ください。

  • C言語についての質問です

    C言語についての質問です キーボードから文字列を入力しそれらを結合して行くことで長い文字列を作成する "Q"を入力した場合入力終了する "F"を入力した場合既存の文字列の前部に追加文字列を加える "R"を入力した場合既存の文字列の後部に追加文字列を追加する。 追加文字列はF,Q,Rのいずれかを入力したのちにキーボードより入力する。 またグローバル関数を使用しないでプログラムを作成する。加えてmain関数とは別に次の様な関数を作成し利用する 戻り値 : 無し(void型) 引数1 : コマンド文字列(Q,F,Rなどの追加文字列の追加場所を決定するchar型配列) 引数2 : 追加文字列(char配列) 引数3 : 追加される側の文字列(char配列) どうしてもグローバル関数を使用しないで作成することができません。また後部への追加文字列の追加はstrcat関数を使い実現することができましたが前部への追加文字列の追加の方法がわかりません。アドバイスやヒントなど何でもいいので指導のほどよろしくお願いします。

  • C言語

    以下のC言語のプログラムを教えてください。 お願いします。 (1)標準入力から文字列(2 文字以上)を入力し,文字数を計上すると共に,入力された文字列の逆順に入れ替える処理を実現してください.なお,以下の要件を満たしたプログラムを作成してください. ・ 入力された文字列は,char 型の配列(要素数50)で受け取ること ・ 文字数を計上するcount 関数(引数:配列のアドレス,戻り値:文字数)を定義 し,main 関数より呼び出すこと ・ 文字列を逆順に入れ替えるreverse 関数(引数:配列のアドレス,戻り値:無し) を定義し,main 関数より呼び出すこと ・ 標準出力の処理は,main 関数で記述すること 【プロトタイプ宣言】 int count(char *str); void reverse(char *str); 【実行結果】 文字列を入力してください(2 文字以上) apple 文字数 = 5 入れ換え前 apple 入れ換え後 elppa (2)char 型の配列(要素数50)を2 つ宣言し,標準入力から2 つの文字列を入力してください.そして,格納した字列を入れ替える関数(swapstr 関数)を作成し,入れ替え前と入れ替え後の配列内の値(文字列)を配列名とともに標準出力するプログラムを作成してください. 【プロトタイプ宣言】 void swapstr(char *str1, char *str2); 【実行結果】 2 つの文字列を入力してください apple strawberry 入れ換え前 配列str1 = apple 配列str2 = strawberry 入れ換え後 配列str1 = strawberry 配列str2 = apple

  • Visual C++ 2005 のプログラムについて

    今回課題としてC++のプログラムを作れというものを突然出されて、C++をほとんど知らないので戸惑っています。 ○数字の、1を入力するとE、2ならD、3ならC、4ならB、5ならA、を表示するプログラムをswitch文を使ってつくりなさい。 ○九九の表を表示するプログラムを作りなさい。配列を使用して作りなさい。 というものです。Visual C++ 2005を使っています。いろんなサイトを見て自分なりにやってみましたが、どうしてもうまくいきません。どういったプログラムになるのか教えてください。よろしくお願いします。

  • Cプログラミングについて

    XP環境でVisual C++2008を使ってC言語の プログラミングをしています。 キーボードから複数回読み込み、長い文字列を作るというものです。 例) >>文字列を入力 >>abc >>今まで入力された文字列を表示 >>gsfgsdfgjfsdabc 配列、ポインタ、メモリの確保を行う事がヒントとして与えられています。 これを実現するために以下のようなプログラムを組んでみました。 int InputCount=0; char InputStr[10]; char *OutputStr[5]; int i=0; while(InputCount<5){ printf("文字列を入力してください\n"); scanf("%s",InputStr); OutputStr[InputCount]=(char*)malloc(strlen(InputStr)+1); OutputStr[InputCount]=InputStr; printf("今までに入力された文字を表示します\n"); for(i=0;i<=InputCount;i++){ printf("%s",OutputString[i]); } printf("\n"); InputCount++; } このように組んでみたのですが、うまくいきませんでした。 これでは一度入力した文字列の内容を 保持する事ができないようです。 根本的にアルゴリズムが悪いのではないかとも考えていますが、どうするのが良いのかわかりません。 初心者なので至らない点、情報不足があればご指摘願います。 これではなぜ無理なのか、またどのようなアプローチが良いのかご教授よろしくお願いします。

専門家に質問してみよう