ВП
Вячеслав Петрачков

Символьные массивы на C.

По задаче нужно выбрать предложения с определенным количеством слов (3).
Вот код:

// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include
#include
#include

int count(char *);
void func(char mas[],int r);

int main(int argc, char *argv[])
{
char mas2[]=" odin dva tri. ctihe ubd. ujfot jionf kjfilnju. i.";
int y;
y=3;
func(mas2,y);
system("PAUSE");
return 0;
}
int count(char *string)
{

int index=0;
char *token,*tokenize;
tokenize=(char *)malloc(strlen(string)*sizeof(char));
strcpy(tokenize,string);
token = strtok( tokenize," " );
while( token != NULL )
{
index++;

token = strtok( NULL, " " );
}
return index;
}

void func(char mas[],int r)
{

char *token,*tokenize;
int index=1;
tokenize=(char *)malloc(strlen(mas)*sizeof(char));
strcpy(tokenize,mas);
token = strtok( tokenize,"." );
while( token != NULL )
{
index=count(token);
if(index==r)
printf("%s\n",token);

token = strtok( NULL, "." );
}

}

Надеюсь он полностью копировался. Код работает не правильно, а именно выводит только первое предложение. Проблема в функции void func().
Если в цикле этой функции вызывать функцию count(), то цикл совершается только один раз. Если не вызывать, то цикл работает нормально.

ЮБ
Юлия Балашова

естественно
в count ты с помощью strtok добиваешь буфер до NULL
и strtok в func уже работает с пустым буфером

Похожие вопросы
Лёгкая задача с массивом на C++
задача про массивы (C++) [1]
Символьные массивы на си.
СИ/СИ++. Как обратиться к элементу динамического двухмерного символьного массива?
C++ Двумерные массивы
C# помощь по массиву.
C++ передача в функцию символьного массива и возвращения указателя на переработанные данные ?
Двумерные массивы в C++
Составление программ с использованием символьных строк (C++)
Динамические массивы c++