/* src указывает на исходное предложение, в word пишем очередное слово. Функция возвращает логическое значение в зависимости от того, достигнут ли конец исходного предложения */
bool get_word(const char *src, char *word) {
static int i = 0;
int wi = 0;
bool ret = FALSE;
while(src != '_' && src != '\0')
word[wi++] = src[i++];
if(src != '\0') {
++i;
ret = TRUE;
}
word[wi] = '\0';
return ret;
}
//тест
int main(int ac, char *av[]) {
static char str[64];
char word[32];
bool status;
//исходное предложение
printf("Enter str : ");
scanf("%s", str);
do {
status = get_word(str, word);
printf("Word : %s\n", word);
} while(status == TRUE);
return 0;
}
Ещё раз о статических переменных
Cи:
Код:
Можно ли решить данную задачу без статической переменной? Слышал, что использование глобальных переменных не есть good..(но сам пока с этим не сталкивался)
По другому можно решить более продумав стуктуру данных и передовать все необходимое функции (если надо именно голый С)
Код:
#include <stdio.h>
int get_word( char* str, char* word )
{
char* p = str;
int len, pos = 0;
while (*p)
if ('_' == *p++)
break;
len = (int)(p - str);
while (--len)
word[pos++] = *str++;
if ('\0' == *p)
word[pos++] = *str++;
word[pos++] = '\0';
return pos;
}
int main( void )
{
char *word, *str, *p;
str = (char*)malloc( 1024 );
word = (char*)malloc( 32 );
printf( "Entry string: " );
scanf( "%s", str );
p = str;
while (*p)
{
p += get_word( p, word );
printf( "%s\n", word );
}
free( word );
free( str );
return 0;
}
int get_word( char* str, char* word )
{
char* p = str;
int len, pos = 0;
while (*p)
if ('_' == *p++)
break;
len = (int)(p - str);
while (--len)
word[pos++] = *str++;
if ('\0' == *p)
word[pos++] = *str++;
word[pos++] = '\0';
return pos;
}
int main( void )
{
char *word, *str, *p;
str = (char*)malloc( 1024 );
word = (char*)malloc( 32 );
printf( "Entry string: " );
scanf( "%s", str );
p = str;
while (*p)
{
p += get_word( p, word );
printf( "%s\n", word );
}
free( word );
free( str );
return 0;
}
Поправка: в конце вводимой строки надо два '\0'. А может и не надо...