#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:
Исследуйте strtok
функцию маркера строки и получите доступ к значениям, на которые указывает массив указателей.
массив указателей strtok()
#include <string.h>
#include <stdio.h>
int main ()
{
char str[80] = "Hello my name is balou";
const char s[2] = " "; //delimiter
char *token;
char *words[5]; //store words
int i = 0;
/* get the first token */
token = strtok(str, s);
/* walk through other tokens */
while( token != NULL )
{
words[i ] = token;
token = strtok(NULL, s);
}
int r, c;
// print words
for (r = 0; r < 5; r )
{
c = 0;
while(*(words[r] c) != '')
{
printf("%c", *(words[r] c));
c ;
}
printf("n");
}
return(0);
}