strncat в цикле

Нужно решить задачу: "Ввести с клавиатуры строку и вывести новую, которая будет такой же, но предварительно удалив все 'b', но только перед которой стоит 'c'". Например ввод: "aabbcbaacbba". вывод новой строки: "aabbcaacba". Я понимаю, что просто в цикле проходимся по строке и проверяем, если символ b , а предыдущий - c, то ничего не делаем, в противном случае добавляем в новую строку символ. Но вот как добавлять их туда я не понимаю, фатальные ошибки выдаёт непонятные. Решить нужно используя именно символьный тип данных.

Вот мой код

#include <iostream>
#include <string>
#include <ctime>

using namespace std;

int main()
{
    setlocale(LC_CTYPE, "rus");

    char s[255];
    char result[255];
    char temp[8];

    cout << "Введите строкy" << endl;
    cin.getline(s, 255);
    
    cout << "исходная строка : " << s << endl;
    

    for (int i = 1; i < strlen(s); i++)
    {
        if (s[i] == 'b' && s[i - 1] == 'c')
        {
            cout << i << " === " << endl;
            //continue;
        }
        else
        {
            temp[10] = s[i];
            strncat_s(result, 25, temp, 10);
        }
    }
    cout << "исходная строка : " << s << endl;
    cout << result << endl;

}

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Zhihar
  1. а это вы ловко делаете!!!

     char temp[8];
     ...
             temp[10] = s[i];
    
  2. и еще касательно вашего кода - чтобы работать со строкой result функциями strxxx, то надо из result предварительно сделать хотя бы пустую строку, т.е.

     result[0] = 0;       
    

а то без этого очень много чего нехорошего может произойти (да у вас и происходит)

P.S.

почему вас не устраивает посимвольный анализ - если символ строки 1 удовлетворяет критериям, он переносится в новую строку, если не удовлетворяет - не переносится?

→ Ссылка
Автор решения: hot_penguin

Вот рабочий код

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    setlocale(LC_CTYPE, "rus");

    char string[255];
    char newString[255];
    
    int newStringCurrentIndex = 1;

    cout << "Введите строкy: " << endl;
    cin.getline(string, 255);
    
    cout << "Исходная строка: " << string << endl;
    
    char currentChar;
    char previousChar = string[0];
    
    newString[0] = string[0];
    
    for (int i = 1; i < strlen(string); i++)
    {
        currentChar = string[i];
        
        if (currentChar == 'b') {
            
            if (previousChar != 'c') {
                newString[newStringCurrentIndex] = string[i]; // b
                newStringCurrentIndex++;
            }
        }
        else {
            newString[newStringCurrentIndex] = string[i]; // не b
            newStringCurrentIndex++;
        }
        
        previousChar = currentChar;
    }
    
    cout << "Новая строка: " << newString << endl;

}
→ Ссылка