Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
#1

заменить все комментарии, заданные в круглых скобках, на одиночный пробел. - C++

02.04.2012, 16:05. Просмотров 1910. Ответов 33
Метки нет (Все метки)

Привет всем!
нужна помощь в написании программы!
Я вот не пойму кое-чего.. Нужно найти сначала в массиве строки "(" запомнить позицию этой скобки в массиве, а потом записывать всё в новый массив до символа ")" и уже в новом массиве произвести этот самый пробел? а потом уже всунуть в основной массив строки с заменой?

C++
1
2
3
4
5
for(i=0;str[i]!='\0';++i)
    {
        if(str[i]=='(')
            i=a;
    for(i=a+1;str[i]!=')';i++)
тут Я перебрал все элементы, которые находятся в скобках, а как их теперь удалить или заменить пробелом?
пробовал копировать с помощью strcpy все элементы до и после скобок, и выводится чушь какая-то ):
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2012, 16:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос заменить все комментарии, заданные в круглых скобках, на одиночный пробел. (C++):

Удалить часть текста в круглых скобках - C++
В заданном тексте удалить часть текста, заключенную в круглые скобки (скобки не удалять). Не поможите?

Что означает название переменной в круглых скобках? - C++
Что означает название переменной в круглых скобках? В комментариях указан тип переменной и некоторые пояснения. auto c = 0; // int ...

Замена двойных пробелов из входного файла на одиночный пробел и запись в выходной файл (объяснить работу кода) - C++
Здравствуйте, нашла код программы, которая заменяет в файле Input.txt двойные пробелы в исходном файле на одиночные пробелы и выводит это...

Замена символов в скобках на пробел - C++
задачка такая, вручную вписывать текст со скобками, и все что внутри скобок, заменить пробелом. сам не могу додуматься. задачка должна...

Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел - C++
Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел

В строке заменить пробел между слов на запятую и пробел - C++
В строке заменить пробел между слов на запятую и пробел

33
Avazart
Эксперт С++
7235 / 5431 / 303
Регистрация: 10.12.2010
Сообщений: 24,135
Записей в блоге: 17
02.04.2012, 16:12 #2
Используй std::string в качестве строк вместо char[]
1
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.04.2012, 21:55  [ТС] #3
Цитата Сообщение от Avazart Посмотреть сообщение
Используй std::string в качестве строк вместо char[]
а для чего нужен std::string?
это, что скопировать строки можно было нормально?
0
Avazart
Эксперт С++
7235 / 5431 / 303
Регистрация: 10.12.2010
Сообщений: 24,135
Записей в блоге: 17
02.04.2012, 22:11 #4
Это контейнер им удобнее(и безопаснее) пользоваться, у него куча методов + можно пользоваться стандартными алгоритмами типа копирования, сортировки,удаления... в общем STL
1
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.04.2012, 22:16  [ТС] #5
блин, дело в том, что Я незнаком со стандартной библиотекой шаблонов ):
мне нужно написать программу с использованием стандартных алгоритмов с++
помогите, пожалуйста!
0
Avazart
Эксперт С++
7235 / 5431 / 303
Регистрация: 10.12.2010
Сообщений: 24,135
Записей в блоге: 17
02.04.2012, 22:30 #6
Тогда читай это (в действительности STL и есть стандартная для С++, а те нужна работа со строками C);
http://www.rsdn.ru/article/cpp/cstr.xml
1
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.04.2012, 22:34 #7
intnower, что должно получиться для строки вида (a))?
0
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.04.2012, 22:38  [ТС] #8
Цитата Сообщение от soon Посмотреть сообщение
intnower, что должно получиться для строки вида (a))?
по-идее ( )
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.04.2012, 22:42 #9
Т.е. найти первую (, найти последнюю ) и заменить все то, что между ними?
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
02.04.2012, 22:42 #10
Цитата Сообщение от intnower Посмотреть сообщение
if(str[i]=='(')
i=a;
что ты этим хотел сделать???
Цитата Сообщение от intnower Посмотреть сообщение
for(i=a+1;str[i]!=')';i++)
а если не будет закрывающей скобки куда упадем???
попробуй использовать стек
после '(' все запихиваем в стек
после ')' достаем из стека и меняем значение на пробел
ну и конечно обработчик конца строки
если есть вылетаем с ошибкой или пишем " не корректная строка"
0
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.04.2012, 22:46  [ТС] #11
Цитата Сообщение от soon Посмотреть сообщение
Т.е. найти первую (, найти последнюю ) и заменить все то, что между ними?
да, именно (:

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
что ты этим хотел сделать???

а если не будет закрывающей скобки куда упадем???
попробуй использовать стек
после '(' все запихиваем в стек
после ')' достаем из стека и меняем значение на пробел
ну и конечно обработчик конца строки
если есть вылетаем с ошибкой или пишем " не корректная строка"
Я, конечно, может быть, и сделал бы так, но не знаком со стеком ):
Я пробовал всё это сделать через массив строк, но что-то безуспешно..

C++
1
2
if(str[i]=='(')
            i=a;
этим Я нашел позицию этой самой скобки, чтобы в последующем использовать в цикле..
C++
1
for(i=a+1;str[i]!=')';i++)
получилось, что Я перебираю все элементы, которые находятся в скобках.. А вот можно ли их как-нибудь заменить на пробел?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.04.2012, 22:52 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <cstdlib>
 
int main()
{
    std::string str("(a))");
    std::size_t first = str.find("("), last = str.rfind(")");
    if(first != std::string::npos && last != std::string::npos && first < last)
    {
        str.replace(first + 1, last - 1, " ");
        std::cout << str << std::endl;
    }
    else
        std::cout << "error" << std::endl;
    return 0;
}
1
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.04.2012, 22:56  [ТС] #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <cstdlib>
 
int main()
{
    std::string str("(a))");
    std::size_t first = str.find("("), last = str.rfind(")");
    if(first != std::string::npos && last != std::string::npos && first < last)
    {
        str.replace(first + 1, last - 1, " ");
        std::cout << str << std::endl;
    }
    else
        std::cout << "error" << std::endl;
    return 0;
}
а если нужно будет заменять в текстовом файле, Я так понимаю, этот код уже не проканает? (:
0
Avazart
Эксперт С++
7235 / 5431 / 303
Регистрация: 10.12.2010
Сообщений: 24,135
Записей в блоге: 17
02.04.2012, 23:01 #14
Кажется не подойдет для строки с несколькими комментариями "бла1 ( комент1 ) бла2 ( комент2 )" вырежет бла2
0
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.04.2012, 23:03  [ТС] #15
а что значит str.find и str.rfind
0
02.04.2012, 23:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2012, 23:03
Привет! Вот еще темы с ответами:

Дан текстовый файл. Заменить в нем все подряд идущие пробелы на один пробел. - C++
Помогите новечку! Дан текстовый файл. Заменить в нем все подряд идущие пробелы на один пробел. Если можно в более простом варианте. ...

Используя заданные разделители продублировать слова-палиндромы через один пробел - C++
Помогите исправить ошибки, программа должна отредактировать строку, продублировав слова-палиндромы через один пробел, используя...

Изъять из строки комментарии (в фигурных скобках) и добавить вместо них символ "пробел" - Pascal
В языке паскаль комментарии ограничиваются фигурными дужками. Написать программу которая изымает комментарии и добавляет вместо них символ...

Что означает число в круглых скобках после INT? - MySQL
приветствую. естъ поле aaa, его тип естъ INT. что разница между етими: INT(3) и INT(8) если в поле aaa я могу записатъ и в первом и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.