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 шт):
а это вы ловко делаете!!!
char temp[8]; ... temp[10] = s[i];и еще касательно вашего кода - чтобы работать со строкой
resultфункциямиstrxxx, то надо изresultпредварительно сделать хотя бы пустую строку, т.е.result[0] = 0;
а то без этого очень много чего нехорошего может произойти (да у вас и происходит)
P.S.
почему вас не устраивает посимвольный анализ - если символ строки 1 удовлетворяет критериям, он переносится в новую строку, если не удовлетворяет - не переносится?
Вот рабочий код
#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;
}
