Как посчитать количество букв в строке c
Перейти к содержимому

Как посчитать количество букв в строке c

  • автор:

Как посчитать количество букв в словах на С++?

С консоли пользователь вводит строку или несколько строк и они записываются в файл. А дальше из этого файла нужно выбрать слова, в которых количество букв «а» будет максимально. И вывести на экран это слово. Вопрос в том, как считывать слова и при этом считать в них буквы. Если записывать из файла в char получается сплошная строка без пробелов. Вот код:

string word[256]; for (int i = 0; i < sizeof(word) / sizeof(string); i++) < file >> word[i]; > file.close(); int count = 0, count_max = 0; char a[256]; for (int i = 0; i < sizeof(word) / sizeof(string); i++) < strcpy_s(a, word[i].c_str()); if (a[i] == 'а') < count++; >> 

Отслеживать
задан 5 дек 2021 в 12:00
1 1 1 серебряный знак 4 4 бронзовых знака

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

5 дек 2021 в 12:10

Собственно сначала я разделил введенную строку на слова и записал их в стринговый массив, но посчитать буквы в нем не смог и поэтому преобразовал стринг в чар

Как посчитать количество разных букв в массиве строк?

Нужно с помощью циклов посчитать количество разных букв в этом слове.

  • Вопрос задан более года назад
  • 379 просмотров

2 комментария

Простой 2 комментария

Сергей Горностаев @sergey-gornostaev Куратор тега C
И? Что вы пытались сделать? С какими проблемами столкнулись?

mayton2019

mayton2019 @mayton2019
Близится пятница. Давайте поднимем ставки. Считаем буквы вообще без циклов.
Решения вопроса 1
Разработчик на С++, экс-олимпиадник.

Можно считать, например самые левые вхождения каждого символа. Для этого пройдитесь по массиву циклом, а внутри вторым циклом проверьте, а есть ли такой же символ левее данной позиции. Если вы такого повторения в цикле не нашли, то надо прибавить 1 к ответу.

Второй вариант — отсортировать символы. Там уже проще подсчитать все символы — это 1 + сколько разных соседей в отсортированном массиве. Это быстрее, если использовать быструю сортировку.

Ну или самый быстрый способ — в массиве на 256 счетчиков подсчитайте, сколько раз каждый символ встречается. Потом подсчитайте, сколько там ненулевых элементов.

Ответ написан более года назад
Виталий Аргонов @Fairenien Автор вопроса
Можете пожалуйста написать код, где проходим циклом по массиву, а внутри вторым циклом проверяем?

Виталий Аргонов, нет. Попробуйте сами. Можете, для начала, написать цикл, который проходится по строке и выводит каждый символ?

Теперь измените его, что бы считать, только буквы ‘a’.

Теперь напишите второй цикл внутри, и считайте, сколько одинаковых символов левее каждого.

Ответы на вопрос 0
Ваш ответ на вопрос

Войдите, чтобы написать ответ

программирование

  • Программирование
  • +2 ещё

С++ Как правильно вернуть ссылку?

  • 1 подписчик
  • 56 минут назад
  • 20 просмотров

Подсчет символов, строк и слов

Программа считает количество введенных пользователем символов, строк и слов. Чтобы программа корректно закончила работу и правильно посчитала, после набора строк надо перейти на новую строку, после чего нажать Ctrl + D (по крайней мере в терминале Linux).

#include int main() < char ch, flag=-1; unsigned c=0; // символы unsigned w=0; // слова unsigned n=0; // строки while ((ch = getchar()) != EOF) < if (ch == '\n') n++; else c++; if (ch == ' ' || ch == '\n') flag = -1; else if (flag == -1) < flag = 1; w++; >> printf("Символы: %u\n", c); printf(" Слова: %u\n", w); printf(" Строки: %u\n", n); >
one two three four Символы: 16 Слова: 4 Строки: 3

X Скрыть Наверх

Решение задач на языке C

как на си++ посчитать количество букв в файле и их повторений.

создал массив из 2 столбцов (в первом будет буква, во втором кол-во повторений) считываю файл по одному символу и сравниваю с тем что есть вмассиве
for(int i=0;i <15;i++)
<
if(StringGrid1->Cells[0]==tmp)
<
StringGrid1->Cells[1]=+1;
>
else
<
StringGrid1->Cells[0]=tmp;
StringGrid1->Cells[1]=+1;
>
>
но в итоге весь первый столбец забивается самой первой буквой, а второй столец только единичкамии,
помогите исправить

Дополнен 12 лет назад

for(int i=0;i <15;i++)
<
if(StringGrid1->Cells[0]==tmp)
<
StringGrid1->Cells[1]=+1;
>
else
<
StringGrid1->Cells[0]=tmp;
StringGrid1->Cells[1]=+1;
>
>

Лучший ответ

Вам нужен статический массив типа int, размером в 256 элементов инициализированный нулями. Далее посимвольно считываете каждый символ, приводите его к типу unsigned char. Далее его символьное значение приводите к типу int и это приведение используете как индекс массива, а его значение увеличиваете на единицу.
По окончании можно выводить те символы, значение элементов массива, которых, больше нуля (означает, что они там, таки, есть) , а их значение и будет количеством символов в текстовом файле.
Это для работы с кодировкой cp1251.
Для работы с cp866 придётся тип считываемого символа оставлять char, но после приведения его к типу int, к результат придётся прибавить 128. А при выводе, соответствующего индексу символа, придётся значение индекса переводить в char, предварительно отняв от него 128.
Поняли мою мысль?!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *