LINUX.ORG.RU

Наноконкурс по Си :)

 , ,


4

2

Вдохновленный подобным запилю свой маленький топик :) В 2010, читая Седжвика, увидел такую задачу:

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

Проще некуда, ведь правда?

Для ее решения был накрапан такой быдлокод

#include <iostream>
#include <unistd.h>
#include <string.h>

using namespace std;

int main(int argc, char* argv[])
{ const int N = 255;
  const unsigned int sz = 26;
  static int l = 0;
  const char alf[sz]={'a','b','c','d','e','f','g','h','i','j','k','l','m',
						 'n','o','p','q','r','s','t','u','w','x','y','z'};
  int index[sz];
  char str[N];
   for (int i = 0; i < sz;i++)
   {index[i] = 0;
   }
   cin >> str;
   cout <<'\n';
   for ( unsigned int j = 0; j < (strlen(str));j++)
   {   if(str[j] < 0x61)
	   str[j] = _tolower(str[j]);
	 for (int k = 0; k < sz;k++){
		 if (str[j] == alf[k]) index[k]++;}  
   }
    cout <<'\t';
	for(int l = 0; l < sz;l++)
	  if (index[l]) { 
		  cout << alf[l] <<" ";
		  cout << index[l] <<'\n' <<'\t';
	  } 
	sleep(7);
   return 0;
}
Тут правда табуляции корежать линуксовый терминал, немного, но тогда дело было под оффтопом. Из того, что хотелось бы улучшить, например, чтобы программа выводила еще и позицию заданного символа от начала строки.

Короче, принимаются ваши красивые решения господа, а также коменты Царя, про мою тотальную АНскильность, хроническое НИасиляторство и даунизм. You are welcome!

★★★★★

Последнее исправление: beastie (всего исправлений: 3)
Ответ на: комментарий от qulinxao

1. тюнил рабочий инструмент.

кто спорил?

3. про множества значений ( а тип это не множество , а множество и набор операций на них) там пересечение , а не включение ( в случае сигнед ансигнед)

signed переводится в unsigned само. Но не наоборот. Т.е. множество unsigned более общее.

emulek
()
Ответ на: комментарий от emulek

в двухмерном массиве строки эквивалентны столбцам, и индексы тоже взаимозаменяемы. Т.е. транспонирование матрицы не занимает времени и тривиально.

В линейной модели компьютерной памяти это просто невозможно!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

в двухмерном массиве строки эквивалентны столбцам, и индексы тоже взаимозаменяемы. Т.е. транспонирование матрицы не занимает времени и тривиально.

В линейной модели компьютерной памяти это просто невозможно!

про разряжённые матрицы слышал? Да и вообще организация матрицы вовсе не обязана быть именно такой. Есть ещё например треугольные матрицы и многое другое. В других ЯП можно использовать то, что нужно, а в сишке — увы.

С другой стороны, это конечно не баг, а фича.

emulek
()
Ответ на: комментарий от emulek

В других ЯП можно использовать то, что нужно

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от emulek

это (вложенность сигнед в соответстующий ансигнед) просто не так.

хинт битовая длина у сигнед и ансигнед вариантов одна и таже то биш мощность значений равна.

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

qulinxao ★★☆
()
Ответ на: комментарий от emulek

Кто обманул? Керниган и Ритчи? Да нет-они как раз правы, а вот ты-тролль.

ChAnton ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.