Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Fuwka
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 36

Подсчитать, сколько раз среди символов строки встречается буква Х

13.04.2015, 02:37. Показов 1903. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задано строку символов. Подсчитать , сколько раз среди символов строки встречается буква Х.

C++
1
2
3
4
5
6
7
8
9
10
11
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
                 Char str[] = { System::Convert::ToChar(textBox1->Text) };
                 
                 int n = 0;
                 for (int i = 0; i < textBox1->SelectionLength; i++)
                 {
                     if ((str[i] == 'x') || (str[i] == 'X'))
                         n += 1;
                 }
                 textBox2->Text += System::Convert::ToString(n);
    }

Что я делаю не так?
Миниатюры
Подсчитать, сколько раз среди символов строки встречается буква Х  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2015, 02:37
Ответы с готовыми решениями:

Подсчитать, сколько раз среди символов строки встречается буква «а»
Уважаемые форумчане сессия нависла над головой!!! Нужно решить 4 задачи, если вас незатруднит помогите пожалуйста! Собственно ВО_от: ...

Подсчитать сколько раз среди символов строки встречается буква x
Дана строка символов, подсчитать сколько раз среди символов строки встречается буква x.

Подсчитать сколько раз среди символов заданной строки встречается буква S
Подсчитать сколько раз среди символов заданной строки встречается буква S,выдать номера позицийвстреченной буквы,определить длину строки

15
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.04.2015, 09:57
Fuwka, char это один символ.В C++/CLI работайте со String^ , в обычном - std::string.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2015, 10:30
Fuwka, размер выбранного это ненужно. Кроме того итерируя по контейнеру лучше всего использовать его параметры. Чем Вам не нравится размер массива?
И, как сказал уже S_el, Вы можете обращаться к символам строки на чтение используя индексацию как к массиву.
1
 Аватар для Fuwka
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 36
13.04.2015, 10:44  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
размер выбранного это ненужно
к сожалению не понял

я пробовал задать строку через String и как-то не получилось проверять каждый знак строки
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2015, 10:52
Лучший ответ Сообщение было отмечено Fuwka как решение

Решение

Цитата Сообщение от Fuwka Посмотреть сообщение
к сожалению не понял
Вот это к чему:
Цитата Сообщение от Fuwka Посмотреть сообщение
i < textBox1->SelectionLength;
?
Если Вы используете строку:
C++
1
2
3
String^ str =  textBox1->Text;
//цикл
if(str[i] == 'x')....;//x - латинское)
то условие продолжения цикла:
C++
1
i < str.Length ;
если используете массив то у него тоже есть размер (длина).
1
 Аватар для Fuwka
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 36
13.04.2015, 10:57  [ТС]
то есть строка не обязательно должна быть массивом?
просто я пробовал так сделать и у меня итераторы подчеркнуло.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2015, 12:21
Цитата Сообщение от Fuwka Посмотреть сообщение
то есть строка не обязательно должна быть массивом?
Она просто не массив и всё. Обратиться для чтения символа можно по индексу. Для записи нельзя никак. Можно создать StringBilder по строке и работать с ним. Если нужен массив символов его можно получить (это Вы и сделали). Другое дело, что он Вам не нужен.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
13.04.2015, 18:50
Разные методы есть у меня (вам подойдёт первый)
1. Используем for
C++
1
2
3
4
5
6
7
String^ str = textBox1->Text;
int count = 0;
for (int i = 0; i < str->Length; i++) {
    if (str[i] == L'х' || str[i] == L'Х')
        count++;
}
textBox2->Text = System::Convert::ToString(count);
2. Используем for each
C++
1
2
3
4
5
6
7
String^ str = textBox1->Text;
int count = 0;
for each (Char symbol in str) {
    if (symbol == L'х' || symbol == L'Х')
        count++;
}
textBox2->Text = System::Convert::ToString(count);
3. Используем LINQ (код выглядит сурово, писал ради развлечения)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using namespace System;
using namespace System::Collections::Generic;
#using "System.Core.dll"
using namespace System::Linq;
 
// ...
 
bool checkSymbol(Char c) {
    return (c == L'х') || (c == L'Х');
}
 
// ...
 
String^ str = textBox1->Text;
int count = Enumerable::Count(str, gcnew Func<Char, bool>(&checkSymbol));
textBox2->Text = System::Convert::ToString(count);
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.04.2015, 01:02
Цитата Сообщение от tezaurismosis Посмотреть сообщение
3. Используем LINQ (код выглядит сурово, писал ради развлечения)
Позволю и себе развлечь себя и Вас:
C++
1
2
3
4
5
6
7
8
9
10
11
12
                 String^ sourceStr="xXlkfjglxXXjghie";
                 String^ symbolsToFind=L"xX";
                 array<Char>^ toFindChars=symbolsToFind->ToCharArray();
                 int cnt =-1;
                 int startPos=-1;
                 
                 do
                 {                  
                      cnt++ ;
                     startPos++;                     
                 }while( ((startPos=sourceStr->IndexOfAny(toFindChars, startPos)) < sourceStr->Length) && startPos > -1);
                 MessageBox::Show(cnt.ToString());
это конечно суровый антигламур в сравнении с использованием Linq.
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.04.2015, 09:35
Цитата Сообщение от IGPIGP Посмотреть сообщение
Позволю и себе развлечь себя и Вас
Продолжаем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <algorithm>
#include <string>
#include <msclr/marshal_cppstd.h>
using namespace System;
 
bool checkSymbol(char c) {
    return (c == 'х') || (c == 'Х');
}
 
int main(array<System::String ^> ^args) {
    String^ str = L"Вася Хохоркин хорош в бухучёте.";
    // из System.String в std::string
    std::string native_str = msclr::interop::marshal_as<std::string>(str);
    // LINQ по-плюсовому
    int count = std::count_if(native_str.begin(), native_str.end(), checkSymbol);
    Console::WriteLine(count);
    return 0;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.04.2015, 16:01
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Продолжаем
Сильно.
А я вотаквот:
C++
1
2
3
4
5
String^ sourceStr="xXlkfjglxXXjghie";
String^ symbolsToFind=L"xX";
array<Char>^ toFindChars=symbolsToFind->ToCharArray();
array<String^>^ alleExcludedSymbols=sourceStr->Split (toFindChars);
 if(alleExcludedSymbols!= nullptr )MessageBox::Show((alleExcludedSymbols->Length-1).ToString());
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.04.2015, 16:57
Цитата Сообщение от IGPIGP Посмотреть сообщение
А я вотаквот
Необычно. У меня идеи кончились
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.04.2015, 20:25

Не по теме:

Цитата Сообщение от tezaurismosis Посмотреть сообщение
необычно.
это просто смешно. В реальности создавать массив для того чтобы посчитать символы, это обфусуация здравого рассудка. Но смешно ведь? :)
:friends:



Добавлено через 2 часа 14 минут
"Ещё парочку..." (М. Булгаков)

C++
1
2
3
4
5
6
7
8
9
10
static bool leaveMeInPeace(wchar_t a){
return a == 'x' || a == 'X';
             }          
private: System::Void button4_Click(System::Object^  sender, System::EventArgs^  e) {
String^ sourceStr="xXlkfjglxXXjghie";
//Можно ещё так массив создать (временный))
array<Char>^ sourceStrChars=sourceStr->ToCharArray();
System::Predicate<Char>^ iAmSoBuzzy = gcnew Predicate<Char>(leaveMeInPeace);
MessageBox::Show(sourceStrChars->FindAll<Char>(sourceStrChars, iAmSoBuzzy)->Length.ToString());
}
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
15.04.2015, 06:09
Цитата Сообщение от IGPIGP Посмотреть сообщение
leaveMeInPeace
Молит эта задача
С использованием аккумулятора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
using namespace System;
using namespace System::Collections::Generic;
#using "System.Core.dll"
using namespace System::Linq;
 
int accumulate(int total, Char c) {
    if (c == L'х' || c == L'Х')
        return total + 1;
    return total;
}
 
int main(array<System::String ^> ^args) {
    String^ str = L"Вася Хохоркин хорош в бухучёте.";
    Func<int, Char, int>^ acc = gcnew Func<int, Char, int>(&accumulate);
    int count = Enumerable::Aggregate<Char, int>(str, 0, acc);
    Console::WriteLine(count);
    return 0;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.04.2015, 10:24
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Молит эта задача
Да уж.
Совсем грустный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int sCoCa(String^ sourceStr, wchar_t symb)
         {
array<Char>^ sourceStrChars=sourceStr->ToCharArray();
sourceStrChars->Sort(sourceStrChars);
String^ sortedStr = gcnew String(sourceStrChars);
array<Char>^ CharSymb = {symb};
int start = sortedStr->IndexOfAny(CharSymb);
int last = sortedStr->LastIndexOfAny(CharSymb);
return last-start+1 ;
         }
private: System::Void button5_Click(System::Object^  sender, System::EventArgs^  e) {
String^ sourceStr="xXlkfjglxXXjghie";
array<Char>^ sourceStrChars=sourceStr->ToCharArray();
sourceStrChars->Sort(sourceStrChars);
String^ sortedStr = gcnew String(sourceStrChars);
String^ symbols="xX";
int cnt=0;
for each(Char a in symbols)cnt+=sCoCa(sourceStr, a);
MessageBox::Show(cnt.ToString());
         }       }
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
15.04.2015, 16:27
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
2
array<Char>^ sourceStrChars=sourceStr->ToCharArray();
sourceStrChars->Sort(sourceStrChars);
Если использовать LINQ, то можно сортировать строку без промежуточного преобразования в массив символов - с помощью OrderBy
C++
1
2
3
4
5
Char ordinary(Char c) {
    return c;
}
 
auto sortedChars = Enumerable::OrderBy(sourceStr, gcnew Func<Char, Char>(&ordinary));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2015, 16:27
Помогаю со студенческими работами здесь

Подсчитать, сколько раз среди символов строки встречается заданная буква
Дана строка символов. Подсчитать, сколько раз среди символов строки встречается заданная буква. Test: Input: m// первый символ это...

Дана строка символов; подсчитать, сколько раз среди символов строки встречается буква "х"
Здрасьте товарищи! спасите от еменуемой пересдачи пожалуйста!я глупая и бестолковая. Составьте прогу на Паскале пожалуйста. Она вроде не...

Подсчитать, сколько раз среди данных символов встречается буква x
В первой строке содержится последовательность символов, оканчивающаяся символом перехода на новую строку. Длина последовательности не...

Подсчитать, сколько раз среди данных символов встречается буква х.
Помогите пожалуйста. Дано n символов. Подсчитать, сколько раз среди данных символов встречается буква х. Верно ли, что среди первых k...

Подсчитать, сколько раз среди данных символов встречается конкретная буква
Подсчитать, сколько раз среди данных символов встречается конкретная буква (бук- ву задать с клавиатуры).


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru