Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 21:17   #1
p00p
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 4
По умолчанию Программа на СИ оценки соотношения числа букв и цифр...

Здравствуйте, у студент первого курса технического вуза. Нам дали задание по программированию: На языке СИ разработать программу оценки соотношения числа букв и цифр в любом наборе аргументов командной строки ее вызова. При этом программа должна обеспечивать выбор аргумента из заданного набора, где абсолютное значение разности количества букв и цифр минимально. Его порядковый номер в списке аргументов должен идентифицировать целочисленный код возврата программы.
Загвозка в том, что ее надо написать используя только библиотеку string.h, о которой я вообще ничего не слышал.
Буду очень несказанно признателен всем, кто откликнется!
p00p вне форума Ответить с цитированием
Старый 30.10.2011, 21:52   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ы?
Пример работы программы можно?
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 21:54   #3
p00p
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 4
По умолчанию

#include<string.h>


int main(int argc,char* argv[])

{

char* p, mas[]="1 2 3 4 5 6 7 8 9";

char* m="0";

int i=0;

int n=0;

while (++i<argc)

{

if (strspn(argv[i],"0123456789")!=strlen(argv[i]))
continue;

if((p=strpbrk(argv[i],mas))== NULL)
continue;

if (strlen(m)>strlen(p))
continue;

if(strcmp(m,p)>0) continue;

m=p;
n=i;

}

return(n);

}

Эта программа ищет максимальное значение в заданном наборе произвольных натуральных чисел, которые представлены в формате системы счисления по основанию 10. Все числа должны передаваться программе через набор аргументов командной строки ее вызова. Целочисленный код возврата программы должен идентифицировать порядковый номер наибольшего числа в заданном наборе.
p00p вне форума Ответить с цитированием
Старый 30.10.2011, 22:10   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ы-ы-ы?
Пример работы программы можно? Типа
Вызов: CoolProg.exe 1g23h 29dksdeiuf773987 sdcjklfe89733 dsjfe73w3 w3897u93
Возвращаемое значение: 1
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 22:19   #5
p00p
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 4
По умолчанию

Ааа) Пардон)
Да, понято верно)
p00p вне форума Ответить с цитированием
Старый 30.10.2011, 22:30   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

"используя только библиотеку string.h" - это "нельзя использовать других библиотек" или "нельзя обойтись без использования этой"?
Потому как нужна она, ИМХО, как рыбе зонтик.
Код:
int DigitOrder(char c){
  //Массив, в котором производится поиск символа c
  static const char scope[]="0123456789";
  //Ищем, если найдём - возвращаем индекс, он же величина цифры
  for(int i=0; i<10; ++i) if(scope[i]==c) return i;
  //Если не нашли
  return -1;
}
То же для букв, а потом
Код:
int DiffBetweenDigitsAndLettersInWord(const char* word){
  //Проходим по слову, считаем
  int digits=0, letters=0;
  //Используем в качестве курсора указатель на символ, разберитесь, как он работает
  for(char* pSymbol=word; (*pSymbol)!='\0'; ++pSymbol){
    if(DigitOrder(*pSymbol)!=-1) ++digits;
    else if(LetterOrder(*pSymbol)!=-1) ++letters;
  }
  //Тернарный оператор ?:, сокращённая версия if-else
  return ((digits-letters)>0)?(digits-letters):(letters-digits);
}
И в основной программе для каждого аргумента командной строки вызываем этого крокодила, а дальше как при обычном поиске максимального элемента в массиве.
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 22:44   #7
p00p
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 4
По умолчанию

Спасибо большое)
Именно "Нельзя использовать другие библиотеки"
Я пока даже не соображу, даже как скомпоновать то, что написано. Впервые сталкиваюсь со стрингом и вряд ли нам дали бы задание получить программу такого уровня. Нет способа по-прозрачней?
p00p вне форума Ответить с цитированием
Старый 30.10.2011, 22:52   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Э-э-э, а где у меня string?
Abstraction вне форума Ответить с цитированием
Старый 31.10.2011, 09:13   #9
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Код:
int DigitOrder(char c){
  //Массив, в котором производится поиск символа c
  static const char scope[]="0123456789";
  //Ищем, если найдём - возвращаем индекс, он же величина цифры
  for(int i=0; i<10; ++i) if(scope[i]==c) return i;
  //Если не нашли
  return -1;
}
Тут массив и цикл не надо
Вот гораздо проще:
Код:
int DigitOrder(char c){
  if ( c >= '0' && c <= '9' ) return c - '0';
  else return -1;
}
An1ka вне форума Ответить с цитированием
Старый 31.10.2011, 09:55   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Тут массив и цикл не надо
Если быть уверенным, что символы идут подряд - не надо. С русскими буквами такой фокус не всегда проходит, поэтому я и предпочёл написать более универсальный вариант.
Опять же, один из плюсов модульности - содержимое конкретной функции можно менять без всяких проблем.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти все трехзначные числа, представимые в виде сумм факториалов своих цифр (программа в VBA) Jeene Помощь студентам 0 18.04.2011 02:14
Даны натуральные числа n и m. Получить сумму m последних цифр числа n pahanzona Microsoft Office Excel 11 27.02.2011 02:17
Генерирование букв и цифр Pavelok Общие вопросы Delphi 5 15.05.2009 17:48
функция ввода цифр и букв SFL Общие вопросы Delphi 6 12.03.2009 20:37