質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

文字数が異なる文字列を織り交ぜたい

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3回答

-1評価

0クリップ

283閲覧

投稿2022/05/18 13:02

編集2022/05/18 23:11

以下のように動くプログラムを作っています。
<例1>Tokyo + Roma→TRookmyao
<例2>Roma + Empire →REommpaire
例2のように、長い方の文字列の余った部分は生成する文字列の後ろに連結させます。

引数のa,bは文字列で、dは生成する配列へのポインタです。
しかし、以下のコードだと例2のケースがSegmentation Faultになってしまいます。
これを回避して正常に動作させたいです。よろしくお願いします。

C++

#include <stdio.h> #include <string.h> char d[200]; void interleave(char* a, char* b, char* d){ d[0] = a[0]; d[1] = b[0]; //iは配列d用の変数、jは配列b用の変数 if(strlen(a) > strlen(b)){ for(int i = 2; a[i/2] != '\0'; i+= 2){ int j = 1; d[i] = a[i/2]; d[i+1] = b[j]; j++; } } if(strlen(b) > strlen(a)){ int j = 1; for(int i = 2; b[j] != '\0'; i += 2){ d[i] = a[i/2]; d[i+1] = b[j]; j++; } int f = strlen(a);//文字数が少ない方の文字数を計算 for(int i = f * 2; b[f] != '\0'; i++){ d[i] = b[f];//余った文字列を連結 } } int e = strlen(a) + strlen(b); d[e] = '\0'; } int main(){ interleave("INIAD", "Toyo", d); printf("%s\n", d); interleave("Toyo", "University", d); printf("%s\n", d); return 0; }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

thkana

2022/05/18 13:11

> なってしまいます そうですね。だからどうしろと? いや、もちろん正解を示せということなのでしょうけれど、 掲示板は間違ったプログラムを投げると自動で正解を出してくれる自動システムではないのですから、 もう少し言いようというものがあると思うのですが。 すくなくともその事象について「動作をトレースしてみたがどうしても期待する結果がでるはずで間違いが見つからない」みたいな話はあるべきじゃないかと思ったりするのですが。
退会済みユーザー

退会済みユーザー

2022/05/18 14:00

そうですね。失礼しました。現在は修正されています。 あとプログラムの挙動を細かく説明していただいてありがとうございました。 とても理解が捗りました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。