Массив char в C + для доступа к каждому char - PullRequest
0 голосов
/ 08 марта 2019

Мне нужно ввести n строк с 1 "строкой" (массивом символов) каждая. Затем я хочу сохранить их в структуре Word и распечатать каждый. Мне нужно получить доступ к первому и последнему символу каждой "строки".

Эти строки всегда имеют букву q после каждого символа (кроме последнего). Пример: Hello -> Hqeqlqlqo

САМОЕ ВАЖНОЕ, мне также нужно вызвать функцию, которая получает «строку», а затем снимает «q» и добавляет каждый символ в эту новую структуру WordModified, чтобы я мог распечатать их все в конец

Итак, мой вопрос: как мне получить доступ к словам обеих структур char на char? и как мне построить свою функцию, чтобы исключить «q» и постоянно добавлять буквы слов в структуру WordModified.

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAXCHAR 1100


typedef struct {
  char name[1101];
} WordReceived;

typedef struct {
  char name[1101];
} WordModified;


int main(void)
{
  //char input[1101];
  int nrlines, i;

  scanf("Number of lines %d\n", &nrlines);
  WordReceived words[nrlines];
  WordModified wordsMod[nrlines];

  for (i = 0; i < nrlines; ++i)
  {
    printf("String\n");
    scanf("%s\n", words[i].name);
  }

  for (i = 0; i < nrlines; ++i)
  {
    printf("word %d: %s\n", i+1, words[i].name);
    printf("First char: %s\n",  words[i].name[0]);
    printf("Last char: %s\n",  words[i].name[n-1]);
  }

  for (i = 0; i < nrlines; ++i)
  {
    printf("word %d: %s\n", i+1, wordsMod[i].name);
  }

  return 0;
}

1 Ответ

1 голос
/ 08 марта 2019

Функция, которая принимает символ 'q', довольно проста.Имейте в виду, что я не справляюсь со случаем, когда слово включает символ «q», вы можете попрактиковаться в этом.

Я немного изменил ваш код, вы можете увидеть мои комментарии.

Я не понимаю, почему вы хотите получить доступ к первому и последнему символу каждого слова.

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAXCHAR 1100 //What is for?

void CleanWord(char *word, char* mod_word);

typedef struct {
  char name[1101];
} WordReceived;

typedef struct {
  char name[1101];
} WordModified;


int main(void)
{
  //char input[1101];
  int nrlines, i;

  printf("Number of lines: \n");
  scanf(" %d", &nrlines);
  WordReceived words[nrlines];
  WordModified wordsMod[nrlines];

  memset(words, 0, sizeof(words));      //Initialize the struct
  memset(words, 0, sizeof(wordsMod));   //Initialize the struct

  for (i = 0; i < nrlines; ++i)
  {
    printf("String\n");
    scanf(" %s", words[i].name);
  }


  for (i = 0; i < nrlines; ++i)
  {
    CleanWord(words[i].name, wordsMod[i].name);

    printf("word %d: %s\n", i+1, words[i].name);
    printf("First char: %c\n",  words[i].name[0]);      //your code has %s formating but the variable is signle character

    int n = strlen(words[i].name);  //store the length of string
    printf("Last char: %c\n",  words[i].name[n-1]);
  }

   for (i = 0; i < nrlines; ++i)
   {
    printf("word %d: %s\n", i+1, wordsMod[i].name);
   }

  return 0;
}

/*  This function remove the char 'q' from the 'word' and store the result to 'mod_word'*/
void CleanWord(char* word, char* mod_word)
{
    int i,j = 0;
    int word_size = strlen(word);

    for(i = 0; i < word_size; i++)
    {
        if(word[i] != 'q')
            mod_word[j++] = word[i];
    }
}
...