前提・実現したいこと
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
C# は関係ないのでタグを外してください。
回答2件
あなたの回答
tips
プレビュー