• ベストアンサー

文字数の逆順

C++で入力文字の文字数を関数を使って逆順にするにはどのようなプログラムを作ればよいでしょうか。 入力文字がabcd 文字数4個 4321と出力したい。

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

  • ベストアンサー
回答No.3

他にもスタックでも可能です。 #include <stack> using namespace std; int main(int argc, char* argv[]) { char* p = "1234"; stack<char> s; //要素をキューに追加 for( int i=0;i<4;i++){ s.push(p[i]); } //キューから要素を出力する while( !s.empty() ){ cout << s.top(); //先頭の要素の取得。 s.pop(); //先頭の要素の破棄 } cout << endl; return 0; }

その他の回答 (2)

  • Interest
  • ベストアンサー率31% (207/659)
回答No.2

こんなんでいかがでしょうか。 int 文字列を逆順表示する (cost char *入力文字列へのポインタ) {  if( NULL == 入力文字列)    処理できないのでエラーを返す;  文字列の長さ = strlen(入力文字列へのポインタ);  文字列の長さを表示する;  for(i=文字列の長さ-1; i>=0; i--){    putchar(入力文字列へのポインタ + i);  }  成功したので0でも返しておく。 } ちなみに、いまどきのオブジェクト指向なプログラミング言語だと、Stringクラスを使って 文字列.length で文字列の長さが取得できるようですね。

回答No.1

int i; for ( i = 入力文字数; i >= 0; --i) {  iを出力 }

関連するQ&A

  • c言語によって文字列を逆順するプログラム

    文字列の並びかたを逆にするプログラムを作るのですが、関数はtoreverse()という関数を作ってプログラムをつくらないといけません>< ちなみに、この関数が逆順にする関数です。あと文字列は最大100文字です。 わかる方いらっしゃいましたらお願いします。

  • 全角文字を含んだ文字の並びを逆順にするには?

    こんにちは。 C言語において、以下のような2つの関数を利用して、全角文字を含んだ文字列の並びを逆順にする事を考えました。 ちなみにコンパイラは、borlandのC++コンパイラを使っています。 文字コードがShift_JISの場合、全角文字の上位バイトが0x81~0x9F、0xE0~0xFCの範囲に収まるという事を聞いたので、まず、以下のように、渡された文字が、全角文字の上位バイトかどうかを判定する関数を作りました。 ____________________________________________________________ int is_2byte(unsigned char c){ return ( ( (c >= 0x81) && (c <= 0x9f) ) || ( (c >= 0xe0) && (c <= 0xfc) ) ); } ____________________________________________________________ 次に、上の関数を利用し、以下のように、渡された文字列の、文字の並びを逆順にする関数を作りました。 ____________________________________________________________ void rev_str(char *str) { char temp[1000]; char tmp; int i, j; for(i=strlen(str)-1, j=0; i>=0; i--, j++){ temp[j]=str[i]; if(is_2byte(temp[j])){ tmp=temp[j-1]; temp[j-1]=temp[j]; temp[j]=tmp; } } temp[j]='\0'; strcpy(str, temp); } __________________________________________________ この関数を、あいうえお順に試して行った所、ひらがなの 「あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめ」 という文字列は、逆順にする事ができたのできました。 しかし、「も」以降の文字を含ませた途端、実行時エラーが発生し、プログラムがストップしてしまいます。 また、カタカナの場合は、「メ」以降の文字を含ませた場合に、実行時エラーとなります。 何が問題なのかが全然分からないので、困っています。 何かいい方法を知っておられる方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • 文字を逆順に表示の関数?

    ちょっと暗号化みたいなことをしたいのですが; セルを引数にすると、そのセル内の文字を最後の文字から逆順に表示するようなエクセルの機能とか、関数とかありますか?

  • c言語の文字列の逆順のプログラムがわかりません

    文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。

  • 20個の数値を逆順に表示

    言語Perlで「最大20個までの数値を入力し、それらを逆順に表示するプログラム」はどう作りますか。 教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • 8桁の2進数を10進数に変換する方法を教えてください。

    キーボードから2進数を入力した値を10進数に変換し、変換結果を出力する方法が解りません。作成するにあたり仕様があり、私一人では解決できないので相談させていただきました。 <仕様は以下の通りです> (1)このプログラム(8桁の2進数を10進数に変換)をする際は、最後に出力する時(printf)以外は関数を使ってはいけません。 (2)キーボードから2進数を入力させる。 (3)空白(ブランク)が入力されても変換可能にする。 (4)入力された2進数は8桁にし、8桁以上の場合はエラーを出す。 (5)2進数の「0」と「1」以外の文字が入力された場合はエラーを出す。 (6)バイナリ変換をし、変換結果を出力する。 以上になります。 まだ、C言語を勉強を習い始めの初心者です。どうか、ご回答のほど宜しくお願いします。

  • 単語逆順コピープログラム

    入力された文字列を逆から表示するというプログラムを作成しているのですがなかなかうまくいきません。僕の作成したプログラムを載せておくので間違いの指摘をお願いします。 出力例(一部) 入力文字列:[ pen. a is This ] 出力文字列:[This is a pen.] ---------コードここから--------- #include <stdio.h> #include <string.h> /* マクロの定義 */ #define BUF 1024 int main(void){ char in[BUF]; /* 入力された文字列を保存する */ char out[BUF]; /* input の内容を単語逆順にして保存する */ int wordcount = 0; /* 単語数 */ char *in_ptr, *out_ptr; /* それぞれの文字列の文字を指すポインタ */ int wsp[128], wep[128]; /* 単語の先頭の添え字と単語末の添え字を保存する配列 */ int i, j; printf("入力された英単語列を単語逆順にします\n"); printf("入力:"); fgets(in, sizeof(in), stdin); sscanf(in, "%c", &in); /* \nを\0に書き換える */ in_ptr = in + strlen(in) - 1; *in_ptr = '\0'; /* 単語数カウント */ printf("文字数のカウント開始\n"); in_ptr = in; if(*in_ptr != ' '){ wordcount++; } for(in_ptr = in; *in_ptr != '\0'; in_ptr++){ if(*in_ptr != ' ' && *(in_ptr - 1) == ' '){ wordcount++; } } printf("文字数のカウント終了: %d単語\n", wordcount); printf("\n単語逆順処理開始\n"); for(i = 0; i < wordcount; i++){ for(in_ptr = in; *in_ptr != '\0'; in_ptr++){ if(*in_ptr != ' ' && *(in_ptr - 1) == ' '){ wsp[i] = *in_ptr; } if((*in_ptr - 1) != ' ' && (*in_ptr == ' ' || *in_ptr == '\0')){ wep[i] = *in_ptr; } } } out_ptr = out; for(i = wordcount - 1; i <= 0; i--){ for(*in_ptr = wsp[i]; *in_ptr <= wep[i]; in_ptr++){ *out_ptr = *in_ptr; out_ptr++; } } printf("単語逆順処理終了\n"); printf("\n入力文字列:[%s]\n", in); printf("出力文字列:[%s]", out); return 0; } ---------コードここまで---------

  • 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

  • EXCEL: 文字数制限

    すみません、どなたか教えてください。 セルC1に対して、文字数制限(50文字まで)をかけたいのです。メッセージboxを表示して。 C1には関数で「=A1&" "&B1」となっています。 A1とB1には文字列が入力されています。 この2つの文字列を組み合わせた文字列がC1にきます。 C1に対して、メニューバーの「データ」/「入力規則」で設定はしているのですが、関数で値を求めているせいか、メッセージboxが表示されません。セルC1に直接入力するとメッセージは表示されるのですが…。ちなみに、文字列にあるスペースもカウントしたいです。 よろしくお願いします。

  • java 大文字と小文字を入れ替える

    JAVAでアルファべットの文字列を読み込んで、その文字列を逆順にして小文字と大文字を入れ替えたいんですけど、どうすればいいのですか。 問題:キーボード入力(abCDE) → 出力(edcBA) 上のようにしたいんですけどどうしたらいいですか?教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう