Как проверить первую букву одной строки с последней буквой другой строки в том же массиве символов - PullRequest
0 голосов
/ 12 ноября 2018

Как я могу завершить функцию canArrangeWords ()?

Вопрос: Учитывая набор слов, проверьте, можем ли мы расположить их в списке таким образом, чтобы последняя буква любого слова и первая буква другого слова были одинаковыми.Функция ввода canArrangeWords должна содержать целое число num и массив слов arr.num обозначает номер слова в списке (1<=num<=100).arr должен содержать слова, состоящие из строчных букв только между 'a' - 'z'.верните 1, если слова могут быть расположены таким образом, и -1, если не можете.

Input : 4  pot ten nice eye
output : 1
input : 3 fox owl pond 
output: -1

Пожалуйста, помогите мне завершить эту программу.**

#include<stdio.h>
#include<string.h>
int canArrangewords(int,char [100][100]);


void main(){
    int n ,count=0 , i ; 
    char arrayS[100][100];
    scanf("%d",&n);
    for (i = 0; i < n; ++i)
    {
        scanf("%s",arrayS[i]);

    }

    for(i=0;i<n;i++)
    {
        printf("%s",arrayS[i]);
        printf("\n");

    }
    printf("%c\n",arrayS[2][4]);

    canArrangewords(n , arrayS);

}

int canArrangewords(int n,char arrayS[100][100]){


    int i , j ;
    for ( i = 0; i < n; i++)
    {
        for ( j = i+1 ; j < strlen(arrayS[j+1]); i++)
        {
            int flag = strlen(arrayS[j+1]) - 1;
            int temp = strcmp(arrayS[i][0],arrayS[j][flag]);



            }

        }


    }



}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Ну, во-первых, подумайте, как вы можете получить этот ответ.

Если вам нужно только знать, могут ли они быть организованы или нет, и вам не нужно делать это самостоятельно, вы можете использовать пустой массив массива int [26] для каждой буквы a-z.

Правило таково, что из всех первых и последних букв для всех слов только два МОГУТ появляться нечетное количество раз - первая буква первого слова в списке и последняя буква в последнем слове в списке, остальные ДОЛЖЕН появляться четное количество раз. Я бы добавил проверку, чтобы убедиться, что буквы также строчные. удачи!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MINASCII 97
#define LETTERS 26
void UpdateArray(char letter, int* arr)
{

  if(arr[letter - MINASCII] == 0)
  {
      ++arr[letter - MINASCII];
  }
  else
  {
     --arr[letter - MINASCII];/*for each second time same letter is seen reduce back to zero */
  }
}
int canArrangewords(int wordNum, char* wordArr[])
{
  int arr[LETTERS] = {0};
  int i = 0;
  int count = 0 ;
  char first;
  char last;
  char* string;
  for (i= 0; i< wordNum; ++i)
  {
     string = wordArr[i];
     first = string[0];
     last = string[strlen(string)-1];
     UpdateArray(first, &arr[0]);
     UpdateArray(last, &arr[0]);
 }

  for(i = 0; i< LETTERS; ++i)
  {
    count+=arr[i];
  }
  if(count == 2 || count == 0)/*either once each or twice -see word1 example in main*/
  {
    return 1;
  }
  return -1;
}


int main()
{
  int i = 0;
  char* words[] = {"pot", "ten", "nice", "eye"};
  char* words1[] = {"pot", "ten", "nip"};
  char* words2[] = {"fox", "owl", "pond"};
  i = canArrangewords(4,words);
  printf("%d\n", i);
  i = canArrangewords(3,words1);
  printf("%d\n", i);
  i = canArrangewords(3,words2);
  printf("%d\n", i);
  return 0;
 }
0 голосов
/ 12 ноября 2018

Измените ваш массив слов на массив указателей на слова. Тогда вы можете просто поменять указатели.

Чтобы ускорить процесс, вместо указателя на слово указывайте на структуру:

struct WORD {
    char *firstchar;   // begin of word
    char *lastchar;    // last char of word
} *words[100];         // array of 100 pointers to words

Чтобы прочитать слова:

char buf[100];
for (i = 0; i < n; ++i)
{
    scanf("%s",buf);
    int len= strlen(buf);
    words[i]= malloc(sizeof(struct WORDS));
    words[i]->firstchar= malloc(len+1);
    strcpy(words[i]->firstchar, buf);
    words[i]->lastchar= words[i]->firstchar + len-1;
}

Теперь сравните и сортируйте:

        if (*words[i]->lastchar == *words[j]->firstchar) {
            struct WORDS *tmp= words[i+1];
            words[i+1]= words[j];
            words[j]= tmp;
        }

Делайте это в цикле, что-то вроде пузырьковой сортировки. Я оставляю это вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...