• ベストアンサー

文字列の反転

こんばんわ。C言語初学者の者です。早速質問させてください。 (1) char a; aの中身には、アルファベット小文字の文字列が5個並んでいるとします。 その文字列を前後反転させるにはどうすればいいでしょうか? 例えばabcdeと並んでいる文字列をedcbaとする場合です。(キーボードからabcdeと打ち込んだとき、aにedcbaと格納させたいのです) (2) char a;   char b;  中身は文字列で、二つを合体させたい場合どうすればいいのでしょうか?  例えば aにはth 、bにはatと格納されている場合thatと繋げたいのです。  よろしくお願いします。

noname#55127
noname#55127

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

  • ベストアンサー
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.3

(1) 皆様がおっしゃっているように、char aには1文字しか入りません。 適宜修正しつつプログラムを書くとこんな感じでしょうか。 char a[128]; // 最大127文字 int i; int length; scanf("%s", a); printf("input str = %s\n", a); length = strlen(a); for(i=0; i<length/2; i++){ // a[i] と a[length-i-1] を交換 char tmp; tmp = a[i]; a[i] = a[length-i-1]; a[length-i-1] = tmp; } printf("output str = %s\n", a); 手元ではこれで input str = abcde output str = edcba と出力されました。 (2)はstrcat()という関数でできます。 char a[128] = "hello"; char b[128] = " world"; strcat(a, b); printf("%s\n", a); これで hello world と出力されます。

noname#55127
質問者

お礼

 丁寧にありがとうございます!!!  

その他の回答 (2)

  • shred
  • ベストアンサー率35% (25/70)
回答No.2

初学者ということで無理もないと思いますが文章がめちゃくちゃです。 (2)にいたっては合体の定義が曖昧です。 単に任意のアドレス空間上で連続であれば良いのかとか。 もう一度よく考えてから質問した方があなたのためです。 考えることは解を得ること以上に重要なことです。 では。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>aの中身には、アルファベット小文字の文字列が5個並んでいるとします。 a は char 型なので、アルファベット 1 文字しか格納できません。

関連するQ&A

  • Perlでの文字列操作について

    Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。

  • 文字を反転させる。

    以下の手順に従ってプログラムを作成せよ.適宜printf を利用して,入力支援(「文字列を入 力して下さい」などの画面表示)を行うこと. (1) キーボードから文字列を入力し,文字配列s[64] に格納する. (2) 文字配列s[64] に格納されている文字列を逆順にしてt[64] に格納する(配列全部を逆 順にするのではなく,NULL 文字までの要素を逆順にする). (3) t[64] を画面表示する. ポインタ使用不可、ヘッダファイル<stdio.h>だけ 入力された文字を反転させるということでしょうか?? #include <stdio.h> int main(void){ int i; char s[256]; char t[256]; printf("文字列を入力:"); scanf("%s" , s); for ( i = 0; i < '\n'; i++ ){ t[i] = s[i]; } printf("文字列の逆順は%s",t); getchar(); getchar(); return(0); } これだとただ入力された文字を出力するだけになってしまいますよね・・・・。どうすればいいのでしょうか?

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

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

    • ベストアンサー
    • Java
  • プログラミング(関数reverseを作る)

    プログラミングの勉強会で文字列を反転させる関数(例:ABCDE→EDCBA)を作れという課題が出たのですが、以下のように書いたきり進みません。あと、何を書けばいいのでしょうか?教えてください。 #include <stdio.h> void reverse(char *); void reverse2(char *); void main(){ char buf[10]; printf("str :"); fgets(buf, 10, stdin); reverse(buf); printf("rev :%s", buf); return; } //文字列を反転させる関数 void reverse(char *s){ return; }

  • 配列への文字列の追加ってどうやって追加するの?

    配列に文字列をいれたいのですが char a[100]; sprintf(a,"AB"); と書くと a[0]にAが a[1]にBが a[2]に\0が格納されますよね。 「配列に一度格納された文字列に新たな文字列を追加」したいのです。 つまり この\0を上書きしてa[2]から CD を追加し、結果 a[0]にAが a[1]にBが a[2]にCが a[3]にDが a[4]に\0が 格納されているようにしたいのです。 半角英数だったらできるのですが全角だとどうやるのでしょうか。 やりたい事は以下のようなものです。 "あい"を1度目の処理で配列に文字列を格納し、次の処理で"うえ"を追加し、 配列aをprintfするとき「あいうえ」が出力されるようにしたいのです。 どなたか教えてください(>_<

  • 文字列を表すための配列とポインタ

    文字列を表すための配列とポインタ  配列とポインタは同様に扱えるもの、と思って、次のプログラムを作りました。処理系は、Visual Studio 2010 コマンドプロンプトです。 #include <stdio.h> void main(void) { char a[256]; char *b; printf("文字列を入力してください。\n"); printf("例「abcde」\n\n"); printf("配列型文字列を使います。\n"); scanf("%s", a); printf("文字列は%sです。\n\n", a); printf("ポインタ型文字列を使います。\n"); scanf("%s", b); printf("文字列は%sです。\n", b); }  すると、まずコンパイル時に、 「warning C4700: 初期化されていないローカル変数'b'が使用されます」 と表示されました。そして、実行すると、「配列型文字列」の方は問題ないのですが、「ポインタ型文字列」の方の実行後に、 「x.exeは動作を停止しました。 問題が発生したため、プログラムが正しく動作しなくなりま した。プログラムは閉じられ、解決策がある場合は Windowsから通知されます。」 と表示され、エラーとして終了してしまいます。 「char *b;」 と宣言するところが問題のようですが、なぜなのかが分かりません。どなたか、解説をお願いします。

  • 文字列をハッシュにしなければならないのですが

    C言語にさ ファイルの中にある、3バイトunicodeの漢字文字列郡をハッシュテーブルに格納してハッシュを作りたいんですが、取っ掛かりすらつかない状況です。 とりあえず、配列から3バイトの16進数にして、後はその文字列分の16進数を足して、それを割ってキーをつくりテーブルにいれる、としようとしています。 配列から3バイトの16進数にする int joint(char a, char b, char c){ int join = 0; join = a<<8; join = (0x0000FF00 & join) + (0x000000FF & b); join = join<<8; join = (0x00FFFF00 & join) + (0x000000FF & c); return join; } このように16進数にするのですが、最初の取っ掛かりとしてのハッシュについては、どうやったらハッシュテーブルに格納でくるのかいまいちわからないのです。誰かわかりやすく教えてください。

  • 文字列を配列として格納したものをpublic

    文章がおかしくてすみませんが 文字列を配列として格納したものをpublic に指定したいのですがどの様にしたらいいのでしょうか? たとえば char *a[20];をpublic:に指定したいときは そのままpublicの所に置けばいいのでしょうか? 宜しくお願いいたします

  • 文字列の検索

    先日同じ質問をして、プログラムの内容を修正したのですが、今度は2つ文字列を入力した後0が無限にでてきます… どなたか解説・指摘・模範解答などおねがいします。 内容は最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char *c,*d; char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(c!='\0'){ c=a; d=b; while(c!='\0' && d!='\0'){ if(c!=d) printf("0"); break; c++; d++; } } if(d='\0') printf("1"); a++; return a; return NULL; } 例 検索対象文字列:asdfghjkl 検索文字列:sdf 1と出力 検索対象文字列:asdfghjkl 検索文字列:qwer 0と出力

  • 文字列分割(JAVA)

    こんにちわ。 JAVAにてですが、文字数不明の全角文字列があるとします。 そこで文字数が50文字以内だった場合は格納先Aに、 51文字以上だった場合には50文字以内を格納先Aへ、 それ以降の文字を格納先Bへ。 格納先Bに入る文字列が51文字以上の場合は 51文字以降を切り捨てる。 ※ここで言う文字数はすべて全角文字として考えます。 上記の内容についてですが極力ライブラリ(API)を使わずに 実装したいと思っているのですが、参考書などを見るとどれも 使っていまして実装に困っています。。 よろしければご教授して頂きたいです。 以上、よろしくお願い致します。

専門家に質問してみよう