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

буквы - C++

Восстановить пароль Регистрация
 
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
05.06.2010, 10:13     буквы #1
помогите написать программа на стандартном си
Строка, содержащая произвольный , состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте

Добавлено через 13 часов 40 минут
подскажите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2010, 10:13     буквы
Посмотрите здесь:

C++ в заданном тексте после каждой буквы «b» добавляет буквы «ak».
В строке заменить все буквы «О» на «Ъ», а буквы «Е» – на случайные символы C++
В текстовом файле после каждой 2 буквы вставлять буквы из слова C++
написать на с++ программу для Кода Цезаря, сдвиг на 3 буквы, чтобы в консоле конвертировал на 3 буквы вперед (алфавита) C++
C++ С экрана вводятся любые буквы. Подсчитать и вывести на печать количество вводов буквы А
C++ Файл содержит буквы латинского алфавита. Заменить буквы 'р' на 'w'
C (СИ) - Ввести строку символов.И После каждой 2 Буквы ( Именно буквы ) Вставить слово C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
05.06.2010, 10:56     буквы #2
Ой. Используйте алгоритм Distribution Sorting. Удачи ^__^
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 11:09     буквы #3
suv121, тема обсуждалась не раз, пользуйтесь поиском.
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 <stdlib.h>
 
#define SIZE 256
 
void FillZero(int* arr, int size) {
  int i;
  for (i = 0; i < size; ++i)
     arr[i] = 0;
}
 
int main() {
  int  count[SIZE];
  char str[] = "This is test string";
  int i;
 
  FillZero(count, SIZE);
 
  for (i = strlen(str) - 1; i >= 0; --i)
    ++count[str[i]];
 
  printf("Result:\n");
  for(i = 0; i < SIZE; ++i)
    if (count[i] > 0)
      printf("%c - %d\n", (char)i, count[i]);
 
  return 0;
}
Результат: http://codepad.org/z6BwsMDh

Цитата Сообщение от pannaruto Посмотреть сообщение
Ой. Используйте алгоритм Distribution Sorting. Удачи ^__^
Позвольте спросить зачем?
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
05.06.2010, 11:46     буквы #4
Думаю для этой проблеммы есть два решения :
1 : Найти все символы в строке, затем вычислять частоту каждой. Тогда сложность O(n^2)
2 : По алгоритму Distribution Sorting как вы решили ведь все символы соответственны числами в диапазоне [ 0 ... 256 ] Сложность О(n)
Вы согласны да ?

Но думаю лучше написать отдельную функцию чтобы увеличивать мобильность.
И ещё в ваше коде не нужна фукция FillZero. Она просто эквивалентна операции :
C
1
int  count[SIZE] = {0};
Так я думаю.

PS : Я не русский поэтому часто не правилно писал и также объяснял. Если возможно исправляйте мои ошибки, пожалуйста. Рад пообщаться с всеми ^__^.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 11:56     буквы #5
Цитата Сообщение от pannaruto Посмотреть сообщение
Вы согласны да ?
Будем считать что да.
Цитата Сообщение от pannaruto Посмотреть сообщение
И ещё в ваше коде не нужна фукция FillZero.
Здесь:
C
1
int count[SIZE] = {0};
мы проинициализировали нулем лишь первый элемент массива, остальные инициализируются значением по умолчанию (тоже нулем).
Фактически использование функции FillZero эквивалентно вашему варианту, но теоритически это не так.

Не по теме:

Цитата Сообщение от pannaruto Посмотреть сообщение
Я не русский поэтому часто не правилно писал и также объяснял. Рад пообщаться с всеми ^__^.
На форуме многие русские пишут гораздо хуже, чем ты. Так что все нормально.

suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
05.06.2010, 16:41  [ТС]     буквы #6
а что такое i = strlen(str) - 1??
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:50     буквы #7
Цитата Сообщение от suv121 Посмотреть сообщение
а что такое i = strlen(str) - 1??
Посмотри в интернете, что делает strlen и поймешь.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
05.06.2010, 16:53     буквы #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
void FillZero(int* arr, int size)
а чем memset() из string.h не угодила?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:56     буквы #9
Цитата Сообщение от easybudda Посмотреть сообщение
а чем memset() из string.h не угодила?
Не люблю я функции семейства mem***, даже не знаю почему.
А вообще да, так будет быстрее.
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
05.06.2010, 17:20  [ТС]     буквы #10
а можете комментарии к программе написать
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 17:40     буквы #11
suv121, не к чему писать комментарии, здесь все просто как 2*2=4. Код сам по себе является комментарием, не ленись разобраться.
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
06.06.2010, 00:48  [ТС]     буквы #12
я не понимаю вот это ++count[str[i]];
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.06.2010, 10:29     буквы #13
Цитата Сообщение от suv121 Посмотреть сообщение
str[i]
Берем i-ый элемент строки.
Цитата Сообщение от suv121 Посмотреть сообщение
++count[str[i]]
Берем str[i]-ый элемент массива count и увеличиваем его на единицу.
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
06.06.2010, 11:03  [ТС]     буквы #14
так ведь str[i]-ый это буква , как можно взять массив у которого индекс буква
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
06.06.2010, 14:50     буквы #15
тогда str[i] автоматически преобразовано от char к int. Каждой символ соответствен одному числу ( Смотрите в таблице ASCII )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2010, 17:46     буквы
Еще ссылки по теме:

Заменить все малые буквы латинского алфавита на соответствующие большие буквы C++
Очереди: одна должна содержать гласные буквы, другая - согласные буквы; чтение из файла C++
Напечатать уникальные буквы заданного текста (буквы, встречающиеся один раз) C++
C++ Переставить все входящие буквы «а» в начало слова, а буквы «я» – в конец
Реализовать функцию, конвертирующую обычные буквы в буквы азбуки Морзе C++

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

Или воспользуйтесь поиском по форуму:
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
06.06.2010, 17:46  [ТС]     буквы #16
спасибо всем , теперь я разобрался
Yandex
Объявления
06.06.2010, 17:46     буквы
Ответ Создать тему
Опции темы

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