Это моё решение на 1 задание.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER 256
size_t _strcspn(const char* str, const char* charset) {
size_t i = 0;
while (str[i]) {
size_t j = 0;
while (charset[j]) {
if (str[i] == charset[j]) return i;
++j;
}
++i;
}
return i;
}
int main(void) {
char str[BUFFER] = { 0 };
char charset[BUFFER] = { 0 };
size_t index = -1;
printf("String: ");
fgets(str, BUFFER, stdin);
str[strlen(str) - 1] = 0;
printf("Charset: ");
fgets(charset, BUFFER, stdin);
charset[strlen(charset) - 1] = 0;
index = _strcspn(str, charset);
printf("Index: %zu\n", index);
system("pause > nul");
return 0;
}
Что же касается второго задания, то объясните своему преподу, что каждая функция должна решать всего одну задачу. В вашем случае либо подсчитать количество цифр в числе, либо сумму цифр на нечётных местах. А также неплохо бы узнать тип входного параметра, потому как натуральное число можно представить любым целочисленным типом или строкой. Итак, решение со строкой.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER 256
size_t _count(const char* number) {
return strlen(number);
}
int _digits_even_pos(const char* number) {
int sum = 0;
size_t i = strlen(number) - 1;
size_t j = 0;
while (i != -1) {
if (++j & 1) sum += number[i] - 48;
--i;
}
return sum;
}
int main(void) {
char number[BUFFER] = { 0 };
size_t count = 0;
int sum = 0;
printf("Number: ");
scanf_s("%s", number, (unsigned)_countof(number));
count = _count(number);
printf("Count: %zu\n", count);
sum = _digits_even_pos(number);
printf("Sum: %d\n", sum);
system("pause > nul");
return 0;
}
Преподу не понравилось мое решение, он сказал нужно решение с функцией. В программирование не шарю, пожалуйста, решите.
Мое решение на №2:
#include <stdio.h>
int main()
{
int n;
printf("n = ");
scanf_s("%d", &n);
if (n <= 0)
{
printf("error\n");
return 0;
}
int count = 0; // счетчик количества цифр
int sum = 0; // сумма нечетных разрядов
int n1 = n; // копия числа, чтобы не повредить его
while (n1 != 0)
{
n1 /= 10; // убираем последний разряд (делим на 10)
count++; // увеличиваем счетчик
}
n1 = n;
// самый младший разряд имеет нечетный номер тогда,
// когда количество цифр нечетное
// поэтому, если цифр четное количетво
// уберем последний разряд, чтобы там теперь стояло число с нечетным номеров
if (count % 2 == 0)
n1 /= 10;
while (n1 != 0)
{
// мы сделали так, что последний разряд
// гарантированно имеет нечетный номер
// прибавим его к sum
sum += n1 % 10;
// уберем последние 2 разряда
// чтобы не нарушить расположение нечетных цифр
n1 /= 100;
}
printf("digits = %d\n", count);
printf("sum = %d\n", sum);
}