ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Программа на C++. Как сделать проверку на конец строки?
  #1  
Старый 21.11.2005, 18:07
Аватар для Meister
Meister
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме:
371736

Репутация: 14
По умолчанию Программа на C++. Как сделать проверку на конец строки?

Вот такая ситуация, для начала цель:
Нужна прога, в которой вводим строку из слов, после нажатия ВВода прога сообщает сколько всего символов в строке, Самое длинное и самое короткое слово. При этом надо учесть что пробелы и знаки пунктуации не будут подсчитываться, но могут использоваться.

Код:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<string.h>
using namespace std;
int main()
{
int i,longe, na4al,slov=0,array[100]={0},bukv=0,s4et=-1,max,min,x=0, prom;
char mass[100]={0};
cout<<"Input text: ";
cin.get(mass,100);
cout<<endl;
cout<<"\n Obshee kol-vo Symbolov: "<< strlen(mass) <<endl;
for (int zz=0; zz<longe-1 ;zz++)
if (ispunct(mass[zz]) || isspace(mass[zz]))
{
array[x]=bukv;
bukv=0;
x++;
}
else
bukv++;
max=array[0];
for (int z=1;z<x;z++)
if (array[z]>max)
max=array[z];
cout<<" Longest Word  "<< max;
min=array[longe];
for (int k=0;k<x;k++)
if (array[k]==0 || array[k]==1)
prom=0;
else
if (array[k]<min)
min=array[k];
cout<<" Shortest word "<< min;
getch();
return 0;
}
Я предполагаю, что нужно сделать еще одну проверку на конец строки тут: if (ispunct(mass[zz]) || isspace(mass[zz]))
Но я не знаю как, повторяю трабл в том, чтобы прога работала правильно если последный символ не является пробелом или знаком пунктуации. У меня правильно считает только если пробел или знак пунктуации. Хелп.
 
Ответить с цитированием

  #2  
Старый 21.11.2005, 18:43
Аватар для Deem3n®
Deem3n®
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме:
3730496

Репутация: 519
По умолчанию

Первый вариант:
читай строку ф-цией сin.getline() (твой код был cin.get(mass,100);), в MSDN есть описание - тогда в массиве не будут символы "конец строки" тобиш '\n'

Второй вариант:
Сделай еще одну проверку на конец строки - символ '\n'

if (ispunct(mass[zz]) || isspace(mass[zz]) || iseol(mass[zz]))
 
Ответить с цитированием

  #3  
Старый 21.11.2005, 19:09
Аватар для Meister
Meister
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме:
371736

Репутация: 14
По умолчанию

А вот что выдает [C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'iseol' Хотя я именно это искал, но пишет, как будто ошибка в написании имени функции.

P.S Кстати разве конец строки \n? Не \0 ?

Последний раз редактировалось Meister; 21.11.2005 в 19:13..
 
Ответить с цитированием

  #4  
Старый 21.11.2005, 19:37
Аватар для RevenAnt
RevenAnt
Познающий
Регистрация: 08.04.2005
Сообщений: 69
Провел на форуме:
207537

Репутация: 59
По умолчанию

Код:
#include <stdio.h>
#include<conio.h>
#include<string.h>

main() {
	char mass[999]={0};
	int len=0,lenmax=0,lenmin=999,maslen,j=0,z;
	gets(mass);
	printf("\nLength: %d\n",strlen(mass));
	maslen=strlen(mass);
	strcat(mass," ");

	for (int i=0; i<maslen+1; i++) {
		if (len==1) {j=i;}

		if ((mass[i]>='a' && mass[i]<='z') || (mass[i]>='A' && mass[i]<='Z')) 
		{ len++; } else 
		{ 
			if (lenmax<len) {lenmax=len;}
			if (lenmin>len && len!=0) {lenmin=len;}
			len=0;
		}

	}
	printf("Longest: %d\n",lenmax);
	printf("Shortest: %d\n",lenmin==999 ? 0 : lenmin);
	getch();
}
вотсс.... просто считает ... сами слова чтобы вывести, нада следить за строкой, либо начала-конец фрагмента, либюо копировать сам фрагмент...
 
Ответить с цитированием

  #5  
Старый 21.11.2005, 19:53
Аватар для Meister
Meister
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме:
371736

Репутация: 14
По умолчанию

RevenAnt, спасибо, +1 к репутации, только почему русские буквы не воспринимает? Попробовал заменить a и z, и A и Z на а и я и А и Я, не пошло.
 
Ответить с цитированием

  #6  
Старый 21.11.2005, 20:55
Аватар для RevenAnt
RevenAnt
Познающий
Регистрация: 08.04.2005
Сообщений: 69
Провел на форуме:
207537

Репутация: 59
По умолчанию

ну просто пойдём тагда по ascii кодам =)
Код:
if ((mass[i]>=-96  && mass[i]<=-17) || (mass[i]>=-128  && mass[i]<=-97))
т.к. был использован просто char а не unsigned char, то русская расскладна у нас находиться в отрицательном диапазоне ....
Код:
for (i=-128;i<-98; i++) {printf ("%c",i);}
 
Ответить с цитированием

  #7  
Старый 21.11.2005, 23:13
Аватар для Deem3n®
Deem3n®
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме:
3730496

Репутация: 519
По умолчанию

Цитата:
А вот что выдает [C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'iseol' Хотя я именно это искал, но пишет, как будто ошибка в написании имени функции.
функцию iseol ты сам должен написать (как и функции isspace и ispunct)
Цитата:
Кстати разве конец строки \n? Не \0 ?
\0 - конец массива char

мда вот решение (предложение может быть любой длины):
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <values.h>

void main()
{
	int maxlen=0;
	int minlen=MAXINT;
	int len=0;
	int total=0;
	char ch;

	clrscr();
	printf("Enter sentence:\n");
	while ((ch=getchar())!='\n') //читаем пока не будет конец строки
	{
		if (ch==' ' || ch==',' || ch=='.' || ch==':' || ch==';') //конец слова
		{
			if (len>maxlen) maxlen=len;
			if (len<minlen && len!=0) minlen=len;
			len=0;
		}
		else
			len++;
		total++;
	}

	printf("Total lenght: %i\n", total);
	printf("Longest: %i\n", maxlen);
	printf("Shortest: %i\n", minlen);
	getch();
}
 
Ответить с цитированием

  #8  
Старый 21.11.2005, 23:24
Аватар для [1Ns]
[1Ns]
Новичок
Регистрация: 24.10.2005
Сообщений: 6
Провел на форуме:
20362

Репутация: 0
Отправить сообщение для [1Ns] с помощью ICQ
По умолчанию

Нам недавно тож такое задавали, я делал так:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
 char *s;
 int r,i,j=0,k=0,k1=0,c[50],k2=100,min,max,n,n1,m=0;
 clrscr();
 printf("Vvedite stroku\n\n  ");
 fflush(stdin);
 gets(s);
 r=strlen(s);
 for (i=0;i<r;i++)
  if (*(s+i)!=' '&&*(s+i)!='.'&&*(s+i)!=','&&*(s+i)!='-') k+=1;
  else if (k!=0) {
		  m+=1;
		  if (k<k2) {min=k;n=i-min;k2=k;}
		  if (k>k1) {max=k;n1=i-max;k1=k;}
		  c[j]=k;j+=1;
		  k=0;
		 }
 if (k!=0&&k<k2) {min=k;n=i-min;}
 if (k>k1) {max=k;n1=i-max;}
 if (k!=0) {m+=1;c[j]=k;}
 for (i=0;i<m-1;i++)
  for (j=i+1;j<m;j++)
   if (c[j]<c[i]) {
		   k=c[i];
		   c[i]=c[j];
		   c[j]=k;
		  }
 j=(m-1)/2;
 printf("\n...................:::STATISTIKA:::...................\n\n * Koli4estvo slov   --- %d\n\n * Minimal'noe slovo --- ",m);
 for(i=n;i<n+min;i++) printf("%c",*(s+i));
 printf(" (simvolov - %d)\n\n",min);
 printf(" * Maximal'noe slovo --- ");
 for(i=n1;i<n1+max;i++) printf("%c",*(s+i));
 printf(" (simvolov - %d)\n\n",max);
 printf(" * Koli4estvo simvolov srednego po dline slova --- %d\n\n......................................................",c[j]);
 getch();
}
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конец строки Mastermind PHP, PERL, MySQL, JavaScript 15 18.08.2005 00:28
ПРОГРАММА "АНТИБАН" Киллер АнтиАдмин 7 09.04.2005 12:00



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ