Помощь с программой по строкам
на данном сайте нашел решение программы, которые мне требовалось: удалить строку заключенную между круглыми скобками(скобки тоже удаляются), без использования библиотеки string, но нужно решить это с помощью подпрограммы, но я столкнулся с трудностями в перестроении программы. Помогите, пожалуйста. Например, из введенной строки hello(my)world получится строка helloworld
Код программы:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
setlocale(LC_ALL, "RUSSIAN");
char str[100], *ptr;
char n_str[100] = "\0", *n_ptr;
cout << "Введите строку:";
cin >> str;
ptr = str;
while (*ptr) {
n_ptr = n_str;
while (*ptr != '(' && *ptr) {
*n_ptr = *ptr;
n_ptr++; ptr++;
if (*ptr == '(') {
*ptr++;
while (*ptr != ')')
ptr++;
ptr++;
}
}
}
*n_ptr = '\0';
cout << "Новая строка: " << n_str << endl;
return 0;
}
Ответы (2 шт):
Ладно, раз Павел просит...
только я не буду переделывать этот "ужас, летящий на крыльях ночи" (с) - хотя бы потому, что программа обрабатывает слово, а не строку. Я напишу свой.
char * delPar(char * s)
{
char * p = s;
while(*p && *p != '(') p++;
if (*p)
{
char * n = p;
while(*n && *n != ')') n++;
if (*n++) while(*p++ = *n++);
}
return s;
}
int main()
{
//setlocale(LC_ALL, "RUSSIAN");
char str[100];
cout << "Введите строку:";
if (cin.getline(str,100))
{
cout << delPar(str);
}
}
Вдруг если вам пригодится удаление нескольких частей заключенных в круглые скобки, то вот пример функции:
char* delPars(char* s) {
char* ptr = s;
while (*ptr && *ptr != '(') ++ptr;
//Указатель на конец части строки без скобок
//(все что левее это промежуточный результат)
char* sptr = ptr;
while (*ptr) {
//Доходим до закрывающей скобки
while (*ptr && *ptr != ')') ++ptr;
//Если мы дошли именно до неё а не до конца строки
if (*ptr == ')') {
//Пропускаем её и начинаем копировать нужный отрезок
++ptr;
while (*ptr && *ptr != '(') {
*sptr = *ptr;
++ptr;
++sptr;
}
}
}
//Если указатель на конец нужной части == указателю начала все строки
//значит ничего удалено не было, иначе обрезаем строку
if (sptr != s) *sptr = '\0';
return s;
}
