Помогите найти ошибку,при выполнении вылезает какая-то непонятная шляпа,весь день не могу понять в чем дело. Программа должна удалять из строки все что находится в скобках включительно.
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
int i;
int k;
void proc(char str[100], char str1[100]) {
for (i = 0; str[i] != '\0'; i++) {
if (str[i] != '(') {
str1[i] = str[i];
}
else {
for (int p = i; str[p] != ')'; p++) {
k++;
}
}
if (str[i] == ')') {
str[i] = str[i + k];
}
}
}
void print(char str1[100]){
puts(str1);
}
void main() {
char str[100];
char str1[100];
cout << "Vvedite simvoli" << endl;
cin>>str;
proc(str,str1);
print(str1);
system("pause");
}
#include <iostream>
#include <string>
using namespace std;
void proc(char str[100], char str1[100])
{
bool skobka_found = false; // флаг найдена открывающая скобка
int j = 0; // счетчик символов второй строки
for (int i = 0; str[i] != '\0'; i++)
{
// Нашли скобку - выставили флаг
if (str[i] == '(')
{
skobka_found = true;
}
// Пока флаг НЕ установлен копируем все символы во вторую строку, Как только скобка будет найдена, то копировать перестаем
if (skobka_found == false)
{
str1[j] = str[i];
j++;
}
// Нашли закрывающую скобку - сбросили флаг
if (str[i] == ')')
{
skobka_found = false;
}
}
}
void print(char str1[100])
{
puts(str1);
}
int main() {
char str[100] = { 0 }; // Важно обнулить все символы массива, иначе там будет ненужный мусор, можно сделать это командой memset
char str1[100] = { 0 };
cout << "Vvedite simvoli" << endl;
cin>>str;
proc(str,str1);
print(str1);
system("pause");
return 0;
}
Результат:
Vvedite simvoli
asd(dsa)qwe(ewq)()
asdqwe
Ну, вот вариант для вложенных скобок - но неверная вложенность просто игнорируется.
#include <iostream>
#include <string>
using namespace std;
string deleter(const string& s)
{
string res;
res.reserve(s.length());
int flag = 0;
for(char c: s)
{
switch(c)
{
case '(': flag++; break;
case ')': if (flag > 0) --flag;
else {
/* Тут должна быть реакция на неверно вложенные скобки*/
}
break;
default : if (!flag) res += c;
}
}
return res;
}
int main()
{
cout << "Input string: ";
string in;
getline(cin,in);
in = deleter(in);
cout << in << endl;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости