Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
GlavLeopold
 Аватар для GlavLeopold
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 14
16.03.2014, 14:09     Определить количество символов фрагмента, заключенного в круглые скобки. #1
Помогите пожалуйста.В строке имеется единственный фрагмент, заключенный в круглые скобки. Определить количество составляющих его символов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 14:09     Определить количество символов фрагмента, заключенного в круглые скобки.
Посмотрите здесь:

Определить правильной ли последовательности расставлены круглые скобки в тексте C++
Определить, корректно ли расставлены круглые, фигурные и квадратные скобки C++
Строки: определить число символов, заключенных в скобки C++
Проверить, правильно ли в текст входят круглые скобки. Ответ ДА или НЕТ с++ C++
В заданном тексте удалить часть текста заключенную в круглые скобки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
16.03.2014, 14:19     Определить количество символов фрагмента, заключенного в круглые скобки. #2
см
Подсчитать количество букв в строке
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.03.2014, 14:22     Определить количество символов фрагмента, заключенного в круглые скобки. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main() {
    
    std::string s{"outer text(inner text) end"};
    
    size_t start = s.find_first_of('(');
    size_t end = s.find_first_of(')');
    
    std::cout << "len = " << end - start - 1 << std::endl;
 
    return 0;
}
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
16.03.2014, 14:29     Определить количество символов фрагмента, заключенного в круглые скобки. #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main(int argc, char *argv[])
{
    std::string str = "foo bar(lol)lorem ipsum dolor";
    size_t count = 0;
 
    for ( std::string::iterator it=str.begin(); it!=str.end(); ++it)
        if(*it == '(')
            while(*++it != ')')
                ++count;
    std::cout << count << std::endl;
 
    return 0;
}
Или даже можно покороче, так:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main(int argc, char *argv[])
{
    std::string str = "foo bar(lol)lorem ipsum dolor";
 
    std::cout << (str.find(')') - str.find('(') - 1) << std::endl;
 
    return 0;
}
Добавлено через 45 секунд

Не по теме:

ну вот, пока писал, уже ответили..

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6173 / 2902 / 284
Регистрация: 04.12.2011
Сообщений: 7,729
Записей в блоге: 3
16.03.2014, 14:43     Определить количество символов фрагмента, заключенного в круглые скобки. #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int count_at_parenses(char *str){
int count_ = 0;
while(str){
if(count_)count_++;
if(*str++ == '(')count_++;
if(*str==')')break;
}
return count_ - 1;
}
 
int main(){
char *str = "This string contains substring at parenses (hidden sence), as you see.";
cout<<str<<endl;
cout<<"the result is " << count_at_parenses(str);
 
cout << endl;
system ( "pause" );
return 0;
}

Не по теме:

вдруг без стрингов надь.

Tulosba
16.03.2014, 14:45
  #6

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
без стрингов надь.
хорошо звучит

KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
16.03.2014, 14:49     Определить количество символов фрагмента, заключенного в круглые скобки. #7
Ну еще можно так, как вариант. Без string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main(int argc, char *argv[])
{
    const char *str = "foo barlorem ipsum dolor(lol)";
    size_t count = 1;
 
    while(*str++ != '(')
        ;
    while(*++str != ')')
        ++count;
    std::cout << count << std::endl;
 
    return 0;
}
Добавлено через 43 секунды

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
хорошо звучит
точно

IGPIGP
16.03.2014, 14:49
  #8

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
хорошо звучит
Дык... Библиотека. Лишь бы не стрингер.

GlavLeopold
 Аватар для GlavLeopold
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 14
16.03.2014, 14:52  [ТС]     Определить количество символов фрагмента, заключенного в круглые скобки. #9
Спасибо огромное.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6173 / 2902 / 284
Регистрация: 04.12.2011
Сообщений: 7,729
Записей в блоге: 3
16.03.2014, 14:57     Определить количество символов фрагмента, заключенного в круглые скобки. #10
И вотаквот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int count_at_parenses(char *str){
int count_ = 0;
while(str){
if(count_)count_++;
if(*str++ == '(')count_++;
if(*str==')')break;
}
return count_ - 1;
}
 
int main(){
char *str = "This string contains substring at parenses (hidden sence), as you see.";
cout<<str<<endl;
cout<<"the result is " << count_at_parenses(str)<<endl;
char *begin_ = str;
while(*begin_++!='(');
char *end_ = str;
while(*end_++!=')');
cout<<"Another words, the result is " << (--end_ - begin_);
cout << endl;
system ( "pause" );
return 0;
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
16.03.2014, 16:58     Определить количество символов фрагмента, заключенного в круглые скобки. #11
Раз тут такое дело пошло, вот ещё вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <functional>
#include <iostream>
#include <random>
#include <string>
 
int main()
{
    const std::string str = "int main(ahaha)!!!";
    auto randPos = std::bind(
        std::uniform_int_distribution<std::string::size_type>(0, str.size() - 1),
        std::minstd_rand());
    std::string::size_type pos1, pos2;
    do
    {
        pos1 = randPos();
        pos2 = randPos();
    } while (str[pos1] != '(' || str[pos2] != ')');
    std::cout << pos2 - pos1 - 1 << std::endl;
    return 0;
}
GlavLeopold
 Аватар для GlavLeopold
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 14
16.03.2014, 19:09  [ТС]     Определить количество символов фрагмента, заключенного в круглые скобки. #12
А как сюда добавиться ввод с клавиатуры

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main(int argc, char *argv[])
{
    std::string str = "foo bar(lol)lorem ipsum dolor";
    size_t count = 0;
 
    for ( std::string::iterator it=str.begin(); it!=str.end(); ++it)
        if(*it == '(')
            while(*++it != ')')
                ++count;
    std::cout << count << std::endl;
 
    return 0;
}
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
16.03.2014, 19:16     Определить количество символов фрагмента, заключенного в круглые скобки. #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main(int argc, char *argv[])
{
    std::string str;
    size_t count = 0;
    std::cout << "Введите предложение.." << std::endl;
    std::getline(std::cin, str);
 
    for (std::string::iterator it=str.begin(); it!=str.end(); ++it)
        if(*it == '(')
            while(*++it != ')')
                ++count;
    std::cout << count << std::endl;
 
    return 0;
}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6173 / 2902 / 284
Регистрация: 04.12.2011
Сообщений: 7,729
Записей в блоге: 3
16.03.2014, 19:43     Определить количество символов фрагмента, заключенного в круглые скобки. #14
GlavLeopold, раз в с string то можно и так например:
C++
1
2
string str_string="This string contains substring at parenses (hidden sence), as you see.";
cout<< "The symbols number is : " <<strlen(str_string.substr(str_string.find_first_of("("),str_string.find_first_of(")")-str_string.find_first_of("(")-1).c_str())<< endl;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.03.2014, 20:27     Определить количество символов фрагмента, заключенного в круглые скобки. #15
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
strlen(str_string.substr(str_string.find_first_of("("),str_string.find_first_of(")")-str_string.find_first_of("(")-1).c_str())
IGPIGP, зачем всё это?
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6173 / 2902 / 284
Регистрация: 04.12.2011
Сообщений: 7,729
Записей в блоге: 3
16.03.2014, 20:44     Определить количество символов фрагмента, заключенного в круглые скобки. #16
Цитата Сообщение от Tulosba Посмотреть сообщение
IGPIGP, зачем всё это?
Думаете, с использованием только функций-членов:
C++
1
cout<< "The symbols number is : " <<(str_string.substr(str_string.find_first_of("("),str_string.find_first_of(")")-str_string.find_first_of("(")-1)).length()<< endl;
?
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
16.03.2014, 20:48     Определить количество символов фрагмента, заключенного в круглые скобки. #17
IGPIGP, "обрезать строку с позиции1 до позиции2 и узнать ее длину" вместо "узнать расстояние разность между позицией2 и позицией1" ?

Добавлено через 39 секунд
В этом и следующем сообщении есть примеры Определить количество символов фрагмента, заключенного в круглые скобки.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6173 / 2902 / 284
Регистрация: 04.12.2011
Сообщений: 7,729
Записей в блоге: 3
16.03.2014, 21:39     Определить количество символов фрагмента, заключенного в круглые скобки. #18
KOPOJI, но так же видно, как и подстроку получить. Вопрос ведь решён и захотелось одну, но большую строку кода наваять. Содержательную.

Не по теме:

Как сказал один большой мастер языка: "string is a char container", то есть стринги это контейнеры чар!
Тут нельзя проявить малодушие, - всё или ничиго!


KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
16.03.2014, 21:55     Определить количество символов фрагмента, заключенного в круглые скобки. #19
IGPIGP, просто лично мне (и, похоже, не мне одному) не видится смысла выполнять лишние действия. Я за минимализм кода, по возможности (желательно без потери читабельности). Не знаю, может быть, вы не поняли, что имелось в виду, но я говорил про это:
В случае вашего кода, вы:
1. Узнаете позицию в строке символа "("
2. Узнаете позицию в строке символа ")"
3. Извлекаете строку от первой позиции до второй
4. Узнаете длину "обрезанной" строки
А я говорил про то, что достаточно было выполнить эти шаги:
1. Узнать позицию в строке символа ")"
2. Узнать позицию в строке символа "("
3. Вычесть разницу между ними.
Как раз здесь и пригодится то самое, что строка в C - это массив символов char (на примере си это проще).
Если это массив, то, следовательно, можно представить стэк, увидим нечто наподобие такого

012345678910
foo(bar)lol

Ваш способ - это просто лишняя вычислительная сложность, которая, в данном случае, еще и ухудшает читабельность.
1. Нашли позицию символа ")" - 7
2. Нашли позицию символа "(" - 3
3. Вычли из первой позиции вторую, узнали количество ячеек между ними - 4
4. Вычли единицу (нам не нужно включать саму скобку) - 3

И, хотя я и понимаю, что вы это знаете, но, все же, не понимаю, зачем делать столько лишних действий

Добавлено через 1 минуту

Не по теме:

Да, и это лишь мое мнение, если что-то не так, прошу меня простить..

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 22:06     Определить количество символов фрагмента, заключенного в круглые скобки.
Еще ссылки по теме:

Каждую цифру заменить на заключенную в круглые скобки последовательность знаков ‘+’ C++
В тексте удалить символы, заключенные в круглые скобки, вместе со скобками C++
Дан файл с текстом проверить правильно ли в нем расставлены круглые скобки C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6173 / 2902 / 284
Регистрация: 04.12.2011
Сообщений: 7,729
Записей в блоге: 3
16.03.2014, 22:06     Определить количество символов фрагмента, заключенного в круглые скобки. #20
Цитата Сообщение от KOPOJI Посмотреть сообщение
И, хотя я и понимаю, что вы это знаете, но, все же, не понимаю, зачем делать столько лишних действий
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вопрос ведь решён и захотелось...
Да без толку всё. Не смогу объяснить. Приношу извинения, за эстетический шок.
Yandex
Объявления
16.03.2014, 22:06     Определить количество символов фрагмента, заключенного в круглые скобки.
Ответ Создать тему
Опции темы

Текущее время: 23:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru