aboutsummaryrefslogtreecommitdiff
path: root/exam_final/rendu/count_alpha
diff options
context:
space:
mode:
Diffstat (limited to 'exam_final/rendu/count_alpha')
-rwxr-xr-xexam_final/rendu/count_alpha/count_alpha.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/exam_final/rendu/count_alpha/count_alpha.c b/exam_final/rendu/count_alpha/count_alpha.c
new file mode 100755
index 0000000..ed502a5
--- /dev/null
+++ b/exam_final/rendu/count_alpha/count_alpha.c
@@ -0,0 +1,109 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* count_alpha.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: exam <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2019/07/26 13:36:33 by exam #+# #+# */
+/* Updated: 2019/07/26 14:30:23 by exam ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdio.h>
+#include <unistd.h>
+
+typedef struct s_counter
+{
+ char letter;
+ int count;
+} t_counter;
+
+int in_counters(t_counter *counters, char c)
+{
+ int i;
+
+ i = 0;
+ while (counters[i].letter)
+ {
+ if (c == counters[i].letter)
+ return (1);
+ i++;
+ }
+ return (0);
+}
+
+void str_tolow(char *str)
+{
+ while (*str)
+ {
+ if (*str >= 'A' && *str <= 'Z')
+ *str += 'a' - 'A';
+ str++;
+ }
+}
+
+int count_char(char c, char *str)
+{
+ int counter;
+
+ counter = 0;
+ while (*str)
+ {
+ if (c == *str)
+ counter++;
+ str++;
+ }
+ return (counter);
+}
+
+void print_counters(t_counter *counters, int size)
+{
+ int i;
+
+ i = 0;
+ while (i < size)
+ {
+ if (counters[i].count != 0)
+ {
+ printf("%d%c", counters[i].count, counters[i].letter);
+ if (i != size - 1)
+ printf(", ");
+ }
+ i++;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ t_counter counters[26];
+ int i;
+ int j;
+
+ if (argc == 2)
+ {
+ i = 0;
+ j = 0;
+ while (i < 26)
+ {
+ counters[i].letter = '\0';
+ counters[i].count = 0;
+ i++;
+ }
+ str_tolow(argv[1]);
+ i = 0;
+ while (argv[1][i])
+ {
+ if (argv[1][i] >= 'a' && argv[1][i] <= 'z' && !in_counters(counters, argv[1][i]))
+ {
+ counters[j].letter = argv[1][i];
+ counters[j].count = count_char(argv[1][i], argv[1]);
+ j++;
+ }
+ i++;
+ }
+ print_counters(counters, j);
+ }
+ printf("\n");
+ return (0);
+}