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)
#include <stdio.h>
#include <ctype.h>
char tbl[256]={0};
int
main(int c,char* a[])
{
	if(c<2)return 0;
	char *b=a[1];
	while(*b){
		tbl[tolower(*b++)]++;
	}
	for(c='a';c<='z';c++){
		if(tbl[c]){
			printf("%c\t%4d\n",c,tbl[c]);
		}
	}
	return 0;
}
qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Хорошо, Вам «плюс» за компактность. Хотя, лично для меня, у Эдика вариант читабельней. Да и версия 2.0 уже релизнулась :D

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

его вывод (первый вариант) многословен :)

второй тоже т.е ежель печатать гистограммы то можно колонку с чиселками сохранить (шоб не считать утилитами число звёздочек в строке).

очевидный код очевиден.

вариант с fold -w1 рулит и педалит.

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

хрюникод ☺

А еще ты "забудешь" заглавные буквы. Ну и зачем считать все символы, если надо только буквы?

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