Вот такая ситуация, для начала цель: Нужна прога, в которой вводим строку из слов, после нажатия ВВода прога сообщает сколько всего символов в строке, Самое длинное и самое короткое слово. При этом надо учесть что пробелы и знаки пунктуации не будут подсчитываться, но могут использоваться. Code: #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])) Но я не знаю как, повторяю трабл в том, чтобы прога работала правильно если последный символ не является пробелом или знаком пунктуации. У меня правильно считает только если пробел или знак пунктуации. Хелп.
Первый вариант: читай строку ф-цией сin.getline() (твой код был cin.get(mass,100);), в MSDN есть описание - тогда в массиве не будут символы "конец строки" тобиш '\n' Второй вариант: Сделай еще одну проверку на конец строки - символ '\n' if (ispunct(mass[zz]) || isspace(mass[zz]) || iseol(mass[zz]))
А вот что выдает [C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'iseol' Хотя я именно это искал, но пишет, как будто ошибка в написании имени функции. P.S Кстати разве конец строки \n? Не \0 ?
Code: #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(); } вотсс.... просто считает ... сами слова чтобы вывести, нада следить за строкой, либо начала-конец фрагмента, либюо копировать сам фрагмент...
RevenAnt, спасибо, +1 к репутации, только почему русские буквы не воспринимает? Попробовал заменить a и z, и A и Z на а и я и А и Я, не пошло.
ну просто пойдём тагда по ascii кодам =) Code: if ((mass[i]>=-96 && mass[i]<=-17) || (mass[i]>=-128 && mass[i]<=-97)) т.к. был использован просто char а не unsigned char, то русская расскладна у нас находиться в отрицательном диапазоне .... Code: for (i=-128;i<-98; i++) {printf ("%c",i);}
функцию iseol ты сам должен написать (как и функции isspace и ispunct) \0 - конец массива char мда вот решение (предложение может быть любой длины): Code: #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(); }
Нам недавно тож такое задавали, я делал так: Code: #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(); }