Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Программа на C++. Как сделать проверку на конец строки? |

21.11.2005, 18:07
|
|
Участник форума
Регистрация: 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]))
Но я не знаю как, повторяю трабл в том, чтобы прога работала правильно если последный символ не является пробелом или знаком пунктуации. У меня правильно считает только если пробел или знак пунктуации. Хелп.
|
|
|

21.11.2005, 18:43
|
|
Постоянный
Регистрация: 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]))
|
|
|

21.11.2005, 19:09
|
|
Участник форума
Регистрация: 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..
|
|
|

21.11.2005, 19:37
|
|
Познающий
Регистрация: 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();
}
вотсс.... просто считает ... сами слова чтобы вывести, нада следить за строкой, либо начала-конец фрагмента, либюо копировать сам фрагмент...
|
|
|

21.11.2005, 19:53
|
|
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме: 371736
Репутация:
14
|
|
RevenAnt, спасибо, +1 к репутации, только почему русские буквы не воспринимает? Попробовал заменить a и z, и A и Z на а и я и А и Я, не пошло.
|
|
|

21.11.2005, 20:55
|
|
Познающий
Регистрация: 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);}
|
|
|

21.11.2005, 23:13
|
|
Постоянный
Регистрация: 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();
}
|
|
|

21.11.2005, 23:24
|
|
Новичок
Регистрация: 24.10.2005
Сообщений: 6
Провел на форуме: 20362
Репутация:
0
|
|
Нам недавно тож такое задавали, я делал так:
Код:
#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)
|
|
|
|