Разделите строку в массиве строк на c

#arrays #c #string

Вопрос:

В данном случае я пытаюсь разделить строку на основе заданного символа ' ' , присвоить каждое слово массиву строк и распечатать каждый элемент массива.

До сих пор мне удавалось получить каждое слово строки, за исключением последнего 🙁

Как мне передать последнее слово?

код:

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

int main()
{
    char    str[101] = "Hello my name is balou";
    char    temp[101];
    char    arr[10001][101];
    int     count;
    int     i;
    int     j;

    count = 0;
    i = 0;
    j = 0;
    while (str[i] != '')
    {
        if (str[i] == ' ' || str[i] == 'n')
        {
            strcpy(arr[count], temp);
            memset(temp, 0, 101);
            count  = 1;
            j = 0;
            i  ;
        }
        temp[j] = str[i];
        i  ;
        j  ;

    }

    i = 0;
    while (i < count)
    {
        printf("arr[i]: %sn", arr[i]);
        i  ;
    }
    return (0);
}
 

выход:

 arr[i]: Hello
arr[i]: my
arr[i]: name
arr[i]: is
 

Комментарии:

1. Что касается вашей проблемы, вам нужен дополнительный strcpy вызов после цикла разделения, чтобы получить последнюю часть.

2. memset(temp, 0, 101) также следует вызвать до того, как вы войдете в цикл while. И кстати , так и должно быть memset(temp, 0, sizeof(temp)) , на случай, если вы измените размер temp .

Ответ №1:

С тех пор, как ты это делаешь:

 while (str[i] != '')
 

ты не будешь говорить ничего strcpy из того, что было последним словом.

Вы можете добавить

 strcpy(arr[count], temp);
count  = 1;
 

сразу после того, как while

Но…

Обратите внимание, что в вашем текущем коде есть ряд проблем. Например, двойные пробелы, строки, заканчивающиеся пробелом, строки, начинающиеся с пробела, и т. Д.

Далее делаем

 char    temp[101];  -->   char    temp[101] = { 0 };
 

а также добавьте некоторый код, чтобы гарантировать, что j он никогда не превысит 100

и… размер char arr[10001][101]; может быть слишком большим в качестве переменной с автоматической продолжительностью хранения в некоторых системах.

И

 printf("arr[i]: %sn", arr[i]); --> printf("arr[%d]: %sn", i, arr[i]);
 

Комментарии:

1. Потрясающе ^^ вот такая куча

Ответ №2: