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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1274閲覧

C言語 配列について

mocamaru

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/04/19 12:09

編集2021/04/20 02:32

前提・実現したいこと

C言語の勉強を始めたばかりの初心者です。

文字列str上で、キーボードから入力された文字(keyとする)が現れた箇所を「<key>」という文字列に置き換えた文字列str1を出力するプログラムを作りたいです。
※大文字、小文字の区別なく行う
質問箇所以外にも間違いがあるかもしれませんが、よろしくお願いします。

発生している問題・エラーメッセージ

iをキー入力したとします。 もとの文字列ではi1文字だったものを<i>の3文字に置き換えたとき、iの直後の文字が2文字分表示されません。 (例)変換前 This is a pen.    変換後 Th<i><i>a pen. どのようにすればすべての文字を出力することができるのでしょうか。

該当のソースコード

C

1 2#include<stdio.h> 3#include<string.h> 4 5int main(void) { 6 7 char str[100]; 8 char str2[100]; 9 char ch; 10 printf("文字列を入力 : "); 11 gets_s(str); 12 strcpy(str2, str); 13 printf("文字を入力 : "); 14 ch = getchar(); 15 int len = strlen(str); 16 int count = 0; 17 int x = 1; 18 19 20 for (int i = 0; str[i] != '\0'; i++) { 21 if ((str[i] == ch) || (str[i] == ch + 32) || (str[i] == ch - 32)) { 22 str2[i] = '<'; 23 str2[i + 1] = ch; 24 str2[i + 2] = '>'; 25 26 //この部分がわかりません 27             str2[len + 2]; 28 while (str2[i + x + 2] == '\0') { 29 str[i + x] = str2[i + x + 2]; 30 x++; 31 } 32 33 printf("「%c」は. %d文字目に見つかりました!\n", ch, i + 1); 34 count++; 35 } 36 37 } 38 39 printf("「%c」は. 合計で%d文字. 見つかりました!\n", ch, count); 40 printf("変換前の文字列 : %s\n", str); 41 42 printf("変換後の文字列 : %s", str2); 43 44 return 0; 45} 46ソースコード

試したこと

補足情報(FW/ツールのバージョンなど)

Visual Studio

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/19 13:11

C# は関係ないのでタグを外してください。
guest

回答2

0

ベストアンサー

str の添字と str2 の添字を別のものにすればよいでしょう。

C

1#include <stdio.h> 2 3int main(void) 4{ 5 char str[100], str2[100]; 6 printf("文字列を入力 : "); 7 gets_s(str, 100); 8 printf("文字を入力 : "); 9 int ch = getchar(); 10 int j = 0, count = 0; 11 for (int i = 0; str[i] != '\0'; i++) { 12 if ((str[i] == ch) || (str[i] == ch + 32) || (str[i] == ch - 32)) { 13 str2[j++] = '<'; 14 str2[j++] = ch; 15 str2[j++] = '>'; 16 printf("「%c」は. %d文字目に見つかりました!\n", ch, i + 1); 17 count++; 18 } 19 else str2[j++] = str[i]; 20 } 21 str2[j] = '\0'; 22 printf("「%c」は. 合計で%d文字. 見つかりました!\n", ch, count); 23 printf("変換前の文字列 : %s\n", str); 24 printf("変換後の文字列 : %s\n", str2); 25 return 0; 26}

投稿2021/04/19 16:25

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mocamaru

2021/04/20 02:45

わかりやすくありがとうございます!理解できました!
guest

0

変換結果をもとの文字列位置に上書きするだけなのでそうなります

検索位置までの文字列+変換文字列+検索終了位置以降の文字列
という感じで新しい文字列を作りましょう

#もちろんCでは、+では文字列結合はできません

投稿2021/04/19 12:14

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mocamaru

2021/04/20 02:31

なるほど、そういうことなんですね、、 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問