• ベストアンサー

プログラミングの問題なのですが、

プログラミングの問題なのですが、 文字列[black]と[dog]を異なった2つの配列に初期化して与え、 別の配列をさらに定義、その中に1つの文字列 [blackdog]として データを代入⇒表示する(出力例: black + dog = blackdog) というプログラムはどんなのになるか教えて下さい。 ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 始めは char str1[6]={'black'}; char str2[4]={'dog'}; char str3[9]; int i, ……; という感じでお願いします。

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.5

>ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。  #4 さんの sprintf() が「レベルの高い」として、#2 さんの「forループ」で書いてみました。  2つの「forループ」の仕組みに、微妙な違いがあることに注目して下さい。  char str1[6] = "black";  char str2[4] = "dog";  char str3[9];  int i, nn = 0;  for( i = 0; i < 6; i++ ){   if( '\0' == str1[ i ] ) break;   str3[ nn++ ] = str1[ i ];  }  for( i = 0; i < 4; i++ ){   str3[ nn++ ] = str2[ i ];   if( '\0' == str2[ i ] ) break;  }  printf( "%s + %s = %s\n", str1, str2, str3 );

komatulong
質問者

お礼

ご回答ありがとうございます。 最終的にまた考えて、 for(i=0;str1[i]!='¥0';i++){ str3[n]=str1[i]; n++; } for(i=0;str2[i]!='¥0';i++){ str3[n]=str2[i]; } という感じでもいいですよね?

その他の回答 (4)

回答No.4

こんなのでいいのかな? ※検証はしていない。 char str1[6] = "black"; char str2[4] = "dog"; char str3[9]; sprintf(str3 ,"%s%s",str1,str2);

komatulong
質問者

お礼

ご回答ありがとうございます。 そういう事だと思いますが、sprintfというのが何か知らないです。

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.3

str1[]とstr2[]の初期化方法が誤っています。

komatulong
質問者

お礼

ご回答ありがとうございます。 そうでしたか。よく考えてみます。

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.2

>使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 一つ目のforループで、str1[]の内容をstr3[]に入れる。 二つ目のforループで、str2[]の内容をstr3[]に入れる。この時、入れる場所はstr1[]の内容を入れた後から入れる。 str2[]が入れ終わったらstr3[]に「文字列の最後」を表す「'\0'」を追加する。 str3[]を表示して終了。

komatulong
質問者

お礼

ご回答ありがとうございます。 何をすればこのプログラムができるのかが理解できました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

言語が何かわかりませんね。C/C++と仮定すると。 strcpy(str3,str1); strcat(str3,str2);

komatulong
質問者

お礼

ご回答ありがとうございます。 C言語ですね。 strcpy、strcatとはなんでしょうか?

関連するQ&A

  • プログラムの課題で分からない問題があるので、ヒントを教えていただきたい

    プログラムの課題で分からない問題があるので、ヒントを教えていただきたいのです。 ちなみにfor文、if文、配列などを応用して(勿論ぜんぶ使わなくても良いです)プログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします。 ・キーボードから入力した2つの文字列(8文字以内)を比較して、同じときには○、異なるときは×と表示する int main(void) { char str[8]; int i,n,na; for (i=0;str1[i]= =str2[i];i++){ if (str1[i]= ='\0'){ n=1; }break; } というトコまでは何とか分かるのですが…

  • C言語のプログラミングですが、

    C言語のプログラミングですが、 255文字以内の文字列をキーボードから入力して、下記の各処理を行うプログラム(※入力した文字データは配列に入力)はどのようにしたらいいでしょうか?(入力例:acFNkeexFFg) ・入力した文字列の最後の文字を出力 ・入力した文字列⇒逆に並べ替えて出力 ・入力した文字列⇒縦に出力(1文字ずつ) ・入力した文字列の中に「F」が何個あるか ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 … char str[255]; int i,n,na,nb,nc; printf("Input Strings= "); scanf("%s",str); for(i=0;str[i]!='¥0';i++){ n=i; } printf("The last character= %c",str[n]); くらいまでしか分かりません…

  • プログラミングの問題で幾つか分からないことがあります。

    プログラミングの問題で幾つか分からないことがあります。 入力した文字列のアスキーコードを1上げて表示するというもので、 #include <stdio.h> int main(void){ char a[100]; int b, c; scanf("%s", a); for(b = 0; b <= 99; b++){ if(a[b] == '\n'){ break; } a[b] == a[b] + 1; } printf("%s", a); return 0; } というふうに作ったのですが、基の文字列がそのまま表示されてしまいます。 あと、文字列strの中にある文字列bagに含まれる文字と同じ文字を空白に置き換える関数を作り、文字列を与えて動かすというプログラムで、 #include <stdio.h> char str[100], bag[100]; int str_space(char str[], char bag[]){ int a, b, c, d; for(a = 0; a <= 99; a++){ if(str[a] == '\n'){ b = a; break; } } for(a = 0; a <= 99; a++){ if(bag[a] == '\n'){ c = a; break; } } for(a = 0; a <= b; a++){ for(d = 0; d <= c; d++){ if(str[a] == bag[d]){ str[a] = ' '; } } } return 0; } int main(void){ scanf("%s", str); scanf("%s", bag); str_space(str, bag); printf("%s", str); return 0; } というふうに作ったのですが、動きませんでした。 ヒントでもいいのでどなたかお教え下さい。

  • 検索するプログラミング

    C言語の問題で、ユーザが文字列を入力し、半角英数字の入力(最大でも1000文字)を改行があるまで受け付ける。次に、ユーザに検索する文字列(最大でも半角20文字)を入力させ、はじめに入力された文字列内にあるかどうかを表示するプログラムを作成する。配列の外部を参照しないように注意する。そのプログラム内で以下の関数を完成させる。 int str_srch (char str [], char srch_str[]) : 文字列strの中に文字列srch_strが含まれていれば、1を返し、含まれていなければ0を返す関数とする。 このような感じになると思うのですがどなたか分かりませんか? int str_compare(char *s1, char *s2) { //文字列s1の先頭にs2が含まれていれば等しいければ1、 //そうでなければ0を返す //while文を利用して、s2の1文字目からs2がヌル文字になるまで //繰り返し、s1の対応する文字と等しいかどうかチェック //s2の最後の文字まで等しければ、1 //そうでなければ0を返す } int str_length(char *str) { //文字列strの長さを返す } int str_srch(char *str, char *srch_str) { int strlen, srch_strlen; int i,j=0; strlen =str_length(str); //文字列strの長さ srch_strlen =str_length(srch_str); //文字列srch_strの長さ for(i=0;i<strlen;i++){ //strのi文字目からにsrch_strがあるかどうか  j=j+str_compare(&str[i], srch_str) } //jは文字列srch_strが文字列strに何回含まれているか、を表す //jが1より多くなれば1を返し //jが0なら0を返す }

  • char型配列をint型に代入するには

    char型の配列(文字列)の各要素ににそれぞれ数字が一つ入れました。 str[0] = '0' str[1] = '1' : str[5] = '5' これをfor文を使ってint型変数に入れたい代入するにはどうれればいいですか? str[0] → dat1 str[1] → dat2 : str[5] → dat5

  • 配列の練習問題

    #include<iostream> using namespace std; //count関数の宣言 int count(char str[], char ch); int main() { char str[100]; char ch; cout << "文字列を入力して下さい。\n"; cin >> str; cout << "文字列から探す文字を入力して下さい。\n"; cin >> ch; int c = count(str, ch); cout << str << "の中に" << ch << "は" << c << "個あります。\n"; return 0; } //count関数の定義 int count(char str[], char ch) { int i = 0; int c = 0; while (str[i]) { if (str[i] == ch) c++; i++; } return c; } こんにちは。 この問題の解答のプログラムの意味がイマイチ解らないので良かったら教えて下さい。 確認がてらに質問します。 よろしくお願いします。

  • プログラミング ポインタを使った文字列比較

    プログラミング ポインタを使った文字列比較 2つの文字列str1, str2を入力し,それらが等しければ0,等しくなければ1を返す関数str_compareを作り、返り値によって以下のように表示するプログラムを作れ。ただし,関数strcmpを使ってはならない。 文字列の入出力はmain関数で行い,関数str_compareの仮引数にはポインタ変数を宣言し,ポインタと間接演算子*を用いた処理を行うこと。 % ./a.out input str1 = Worldcup input str2 = Worldcup same strings % ./a.out input str1 = World input str2 = cup different strings この問題に私は次のようにプログラミングしました。 #include <stdio.h> #define MAX 100 int str_compare(char *, char *); main() { char str1[MAX], str2[MAX]; printf("input str1 = %s", str1); scanf("%s", str1); printf("input str2 = %s", str2); scanf("%s", str2); str_compare(str1, str2); if (str_compare(str1, str2) == 0) printf("same strings\n"); else if (str_compare(str1, str2) == 1) printf("different strings\n"); } int str_compare(char *s1, char *s2) { int i; for (i = 0; s1[i] != '\0'; i++) { if (s1[i] != s2[i]) { break; } } if (s1[i] == s2[i]) { return 0; } else { return 1; } } これで実行したところ、「input str1 =」の右のスペースが文字化け?してしまいます。(半角カタカナや記号が出る)ただ、その後に文字列を入力すると、正しく機能します。 これは何が悪いなのでしょうか、どなたか教えてください。

  • 配列の参照渡し

    以下の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

  • 文字列の扱い方

    初歩的な質問ですみません… str文字列からcという文字を見つけたら添字を返すという関数を作ったのですが、 iにこの関数を代入して、if文の制御式にiを使って比較するまでは正常なのですが、 真文にiを使うと何故か偽文(という言い方でいいのでしょうか…この場合("そんな値はありません。"というところです)が実行されてしまいます。 よろしければご教授お願い致します。 #include <stdio.h> int str_char(const char str[],int c) { int len = strlen(str); int i; for (i = 0;i < len;i++) { if (str[i] == c) return i; } return -1; } int main() { char str[64] = "Fucking Brutal Death Metal"; int ch,i; printf("どの文字を調べますか?"); scanf("%c",&ch); i = str_char(str,ch); if (i >= 0) printf("その文字は%d番目にあります。",str_char(str,ch) + 1); //何故かiだと動かない else printf("そんな値はありません。"); return 0; }

  • 配列で混乱しています

    c言語を勉強中のものです。文字列を配列で扱う場合とポインタで扱う場合の違いにこんらんしています。 たとえば char str[] = "hello"; str = "goodby"; のように文字列の再格納はダメですが、 char *str = "helllo"; str = "goodby" は大丈夫です。 また char[100]; scanf("%s",str) は大丈夫ですが char *str; scanf("%s",str) はいけません。この2つの違いは何によるのでしょうか? またポインタはそもそも int a; int *pa; pa = &a; のように、宣言したあとはアドレスを入れる専用のハコのように考えていたのですが、 char *str = "helllo"; str = "goodby" のようにいきなりアドレスでない文字列を代入するのも納得がいきません。誰か解説をお願いします。

専門家に質問してみよう