Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2014, 23:14   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Работа со строками...СИ

Ребят, вся та же тема, как и обещал, в общем ничего у меня так и не вышло, вот одно из заданий, времени до завтра, а я уже два дня голову ломаю В общем цель такая:

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

Задачу понял, алгоритма нет.

Вот мои тщетные попытки что-то предпринять:D


Код:
#include <QCoreApplication>
#include <string.h>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
char str_gl[255];

printf("BBEDITE STROKY: \n");
gets(str_gl);
strlwr(str_gl);
int length1=0;

printf("BBEDITE DLINU: \n");
scanf("%d",&length1);
int count=0,count2=0;

for (int i=0;strlen(str_gl)-1;i++)
{

if ((str_gl[i]!=' ')||(str_gl[i]!='.') ||(str_gl[i]!=','))
{
count2++;
}

if ((count2>=length1)&&((str_gl[i]==' ')||(str_gl[i]=='.') ||(str_gl[i]==','))) 
{
count++; 
count2=0;
}

}

printf("SLOV: %d",count);
return a.exec();
}
В условии пытался зацепиться за разделители, о них в формулировке не сказано ни слова, то есть если цикл наткнулся на один из разделителей, то сравнивается с N, если слов до разделителя больше равно N, то инкриментим каунт....

Ребят, я в отчаянье, завтра зачет, без кода недопуск, в общем HELP.

Спасибо!
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 00:30   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, есть какие-нибудь идеи?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 00:51   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Эй, участник клуба, ты кому свой логин погонять дал?

Код:
for (int i=0;strlen(str_gl)-1;i++)
условие странное

UPD:
например так, через встроенные функции:
Код:
#include <string.h>

int main(int argc, char *argv[])
{
	char str[] ="- This, a sample string.";
	
	char *pch = strtok (str," ,.-");
	int lng = 3, count = 0;
	while (pch != NULL)
	{
		
		if (strlen(pch) > lng)
		{
			printf ("%s\n",pch);
			count++;
		}
		pch = strtok (NULL, " ,.-");
	}
	printf("SLOV: %d",count);
	return 0;

}

Последний раз редактировалось Smogg; 24.12.2014 в 01:11.
Smogg вне форума Ответить с цитированием
Старый 24.12.2014, 01:11   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Тут счетный цикл с условием по длине строки, нумерация с нуля, поэтому извлекаем длину массива строк и вычитаем единицу

Я про эти условия)) В цикле ищем разделители))

Код:
if ((str_gl[i]!=' ')||(str_gl[i]!='.') ||(str_gl[i]!=','))
{
count2++;
}

if ((count2>=length1)&&((str_gl[i]==' ')||(str_gl[i]=='.') ||(str_gl[i]==','))) 
{
count++; 
count2=0;
}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 01:18   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
#include <QCoreApplication>
#include <string.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    char str[255];
    int lng=0;
    printf("VVEDITE FRAZU:\n");
   // scanf("%c",&str);
    gets(str);

    printf("VVEDITE N:\n");
    scanf("%d",&lng);
        char *pch = strtok (str," ,.-");
        int  count = 0;
        while (pch != NULL)
        {

            if (strlen(pch) >= lng)
            {
                printf ("%s\n",pch);
                count++;
            }
            pch = strtok (NULL, " ,.-");
        }
        printf("\nSLOV: %d",count);

    return a.exec();
}
Спасибо!)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 01:23   #6
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

или ручками:
Код:
	for (int i=0; str_gl[i] != '\0';i++)
	{

		if ((str_gl[i]==' ')||(str_gl[i]=='.') ||(str_gl[i]==','))
		{
			count2 = 0;
			continue;
		}

		count2++;

		if (count2==length1+1) 
		{
			count++; 			
		}

	}
Smogg вне форума Ответить с цитированием
Старый 24.12.2014, 08:08   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, а чем отличается gets(); от scanf("%c",&...)?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 08:12   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хотябы тем что у gets() нет спецификаторов формата вводимой строки.
scanf в этом плане поуниверсальнее, если нужно парсить вводимую строку, выбирая из нее элементы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками в С++ KyKi Помощь студентам 1 04.01.2014 01:04
Работа со строками. nikitabool Помощь студентам 2 30.12.2013 10:25
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками NightFire Помощь студентам 4 22.03.2009 20:54
работа со строками Milker-Monster Помощь студентам 1 02.11.2008 21:32