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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2015, 07:21   #1
dimefield
 
Регистрация: 12.04.2015
Сообщений: 9
По умолчанию Язык Си, массивы.

Привет всем.

Помогите, пожалуйста, написать программу на языке Си.

Задание:
Пользователь вводит два слова (или две строки). Проверить, являются ли
они анаграммами. Анаграмма — слово состоящее из того же набора символов.
Пример анаграмм:
smartest
mattress

В программе необходимо сосчитать, сколько раз какая-либо буква повторяется в первом слове. Далее необходимо сосчитать, сколько раз та же самая буква повторяется во втором слове. И если количество повторений всех букв совпадает в обоих словах, то слова являются анаграммами.
dimefield вне форума Ответить с цитированием
Старый 12.04.2015, 08:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
IsAnagram(char *hitotsu, char *futatsu){
 int chars[255]={0},i;
 for(i=0;hitotsu[i];i++) chars[hitotsu[i]]++; //Собираем кол-во символики из первой строки
 //отнимаем кол-во символики из второй строки от того что собрали в первой
 for(i=0;futatsu[i];i++) chars[futatsu[i]]--; 

 // Проверяем разницу - если 0, значит кол-во символа и там и там совпало. 
 for(i=0;i<255;i++) if(!chars[i]) return false;
 return true;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.04.2015, 08:31   #3
dimefield
 
Регистрация: 12.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
IsAnagram(char *hitotsu, char *futatsu){
 int chars[255]={0},i;
 for(i=0;hitotsu[i];i++) chars[hitotsu[i]]++; //Собираем кол-во символики из первой строки
 //отнимаем кол-во символики из второй строки от того что собрали в первой
 for(i=0;futatsu[i];i++) chars[futatsu[i]]--; 

 // Проверяем разницу - если 0, значит кол-во символа и там и там совпало. 
 for(i=0;i<255;i++) if(!chars[i]) return false;
 return true;
}
У меня есть кое-какие наброски кода. Программа должна выглядеть как-то так:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>

int main () {
  int n = 10;
  
  char a[n + 1];    
  printf("Введите первое слово, состоящее не более чем из десяти символов: \n");
  if (scanf("%10s", a) != 1) {
   printf("Ошибка ввода\n");
   exit(EXIT_FAILURE);
   }
   
  char b[n + 1];
  printf("Введите второе слово, состоящее не более чем из десяти символов: \n");
  if (scanf("%10s", b) != 1) {
   printf("Ошибка ввода\n");
   exit(EXIT_FAILURE);
   }
   
  printf("Сравним строки: %s и %s\n", a, b);
  int l = 26;
  int word[l];
  for (int i = 0; i < l; i++) {
   word[i] = 0;
  }
  char *s = a;
  while (*s != '\0') {
   if (isalpha(*s)) {
    
   }
   s++;
   }

  int word2[l];
  for (int i = 0; i < l; i++) {
   word2[i] = 0;
  }
  char *t = b;
  while (*t != '\0') {
   if (isalpha(*t)) {
    
   t++;
  }

Последний раз редактировалось Stilet; 12.04.2015 в 08:37.
dimefield вне форума Ответить с цитированием
Старый 12.04.2015, 08:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

М.м.м... Ну твоя идея почти сходя с моей.
А чем если не секрет моя функция не устраивает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.04.2015, 08:49   #5
dimefield
 
Регистрация: 12.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
М.м.м... Ну твоя идея почти сходя с моей.
А чем если не секрет моя функция не устраивает?
1. Вот эта строка: int chars[255]={0},i; .
Это массив типа int, состоящий из 255 элементов, каждый из которых равен нулю и каждый элемент с индексом i ?

2. Мне нужно написать программу, используя isalpha и isspace для букв и пробельных символов соответственно. Вот только я не понимаю как это должно выглядеть.

Последний раз редактировалось dimefield; 12.04.2015 в 09:14.
dimefield вне форума Ответить с цитированием
Старый 12.04.2015, 09:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это массив типа int, состоящий из 255 элементов, каждый из которых равен нулю и каждый элемент с индексом i ?
И да и нет. i вообще для цикла. А массив для количества появлений символов.
Цитата:
нужно написать программу, используя isalpha и isspace
Обязательно с этими функциями? У тебя же каждая строка - одно слово. Какие там пробелы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.04.2015, 10:19   #7
dimefield
 
Регистрация: 12.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
И да и нет. i вообще для цикла. А массив для количества появлений символов.

Обязательно с этими функциями? У тебя же каждая строка - одно слово. Какие там пробелы?
Да, обязательно. По крайней мере, препод мне сказал использовать именно эти функции.

насчет пробелов я сам не понял.
dimefield вне форума Ответить с цитированием
Старый 12.04.2015, 13:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да, обязательно.
Пф...
Тогда у меня нет идей.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы.Язык Си Caca0 Помощь студентам 26 05.02.2013 00:10
массивы. язык СИ. skauzer_blr Помощь студентам 8 10.04.2012 22:15
Массивы, язык - C. xcyber Помощь студентам 9 19.10.2009 21:38
Массивы (язык С++) Ноберт Помощь студентам 3 24.08.2009 23:10
массивы(язык Си) bars1984 Помощь студентам 14 11.05.2009 21:15