Как скопировать содержимое указателя в массив строк в другой массив? - PullRequest
1 голос
/ 09 апреля 2020

Я включил «rawRecipesDevt.h», который представляет собой массив, содержащий названия рецептов (с префиксом 0), за которыми следуют ингредиенты (с префиксом 1). Итак, первый рецепт - «Брокколи, салат из капусты». Префиксы не должны распечатываться и могут быть удалены со строк, если это удобно. Список заканчивается пустой строкой в ​​качестве терминатора. Это массив ниже:

char *rawRecipes[]={
"0Broccoli Coleslaw",
"1olive oil",
"1white vinegar",
"1broccoli",
"0Creamy Broccoli Salad",
"1broccoli",
"1white sugar",
"1red onion",
"1white wine vinegar",
"0Minnesota Broccoli Salad",
"1eggs",
"1broccoli",
"1red onion",
""
};

Я хочу скопировать содержимое char * rawRecipes [] в строковый массив, чтобы упростить печать. Должен ли этот массив быть чем-то вроде char stringsCopied [20] [30] (поэтому мне не нужно печатать 1 или 0) или stringsCopied [20]? Я пытался использовать strcpy, но при попытке печати ничего не происходит. Это то, что я до сих пор:

#include "rawRecipesDevt.h" //change to rawRecipes.h when submitting
#include <stdio.h>
#include <string.h>

int main(void) {
  int input, i, j, k;
  // char *stringsCopied[250];
  // I am supposed to execute the commands 1-5
  char stringsCopied[250][40];
  printf("\n\n");
  printf("Enter a command by letter \n");
  printf("1. List all Recipes\n");
  printf("2. Print a Recipe \n");
  printf("3. List All Recipes with a given ingredient \n");
  printf("4. List All Ingredients in alphabetical order \n");
  printf("5. Exit the program \n");
  printf("Give input: \n");
  scanf("%d", &input);

  // printf("%s",rawRecipes);
  for (i = 0; i != ""; i++) {
    for (j = 1; j != ""; j++) {
      stringsCopied[i][j] = *rawRecipes[i];
      printf("%s", stringsCopied[i][j]);
    }
  }
  printf("%s", stringsCopied);

  /*if(input==1){
      for(i=0;rawRecipes[i]!='\0';i++){
          if(ingredient(rawRecipes[i]==0)){
              printf("%s\n",&rawRecipes[i]);
          }
      }
  }*/

  return 0;
}

1 Ответ

0 голосов
/ 09 апреля 2020

Чтобы скопировать строку, вы должны использовать функцию strcpy, например, например:

strcpy(stringsCopied[i], rawRecipes[i]);

Это означает, что вам не нужен вложенный l oop для копирования символа символ (который вы на самом деле не делаете правильно, вы только копируете первый символ rawRecipes[i], то есть rawRecipes[i][0]).

Ваше условие l oop также неверно, Вы не можете l oop, пока индекс не станет пустой строкой. Вам необходимо рассчитать количество элементов в исходном массиве и l oop этой суммы. Вы можете сделать это, используя оператор sizeof, чтобы получить размер массива и разделить его на размер каждого элемента: sizeof rawRecipes / sizeof rawRecipes[0]:

for(i = 0; i < sizeof rawRecipes / sizeof rawRecipes[0]; ++i)
{
    strcpy(stringsCopied[i], rawRecipes[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...