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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Meister, 21 Nov 2005.

  1. Meister

    Meister Elder - Старейшина

    Joined:
    13 Oct 2005
    Messages:
    185
    Likes Received:
    7
    Reputations:
    0
    Вот такая ситуация, для начала цель:
    Нужна прога, в которой вводим строку из слов, после нажатия ВВода прога сообщает сколько всего символов в строке, Самое длинное и самое короткое слово. При этом надо учесть что пробелы и знаки пунктуации не будут подсчитываться, но могут использоваться.

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

    Deem3n® RTFMSDN

    Joined:
    19 Sep 2005
    Messages:
    378
    Likes Received:
    153
    Reputations:
    164
    Первый вариант:
    читай строку ф-цией сin.getline() (твой код был cin.get(mass,100);), в MSDN есть описание - тогда в массиве не будут символы "конец строки" тобиш '\n'

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

    if (ispunct(mass[zz]) || isspace(mass[zz]) || iseol(mass[zz]))
     
  3. Meister

    Meister Elder - Старейшина

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

    P.S Кстати разве конец строки \n? Не \0 ?
     
    #3 Meister, 21 Nov 2005
    Last edited: 21 Nov 2005
  4. RevenAnt

    RevenAnt Elder - Старейшина

    Joined:
    8 Apr 2005
    Messages:
    60
    Likes Received:
    18
    Reputations:
    9
    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();
    }
    
    вотсс.... просто считает ... сами слова чтобы вывести, нада следить за строкой, либо начала-конец фрагмента, либюо копировать сам фрагмент...
     
    1 person likes this.
  5. Meister

    Meister Elder - Старейшина

    Joined:
    13 Oct 2005
    Messages:
    185
    Likes Received:
    7
    Reputations:
    0
    RevenAnt, спасибо, +1 к репутации, только почему русские буквы не воспринимает? Попробовал заменить a и z, и A и Z на а и я и А и Я, не пошло.
     
  6. RevenAnt

    RevenAnt Elder - Старейшина

    Joined:
    8 Apr 2005
    Messages:
    60
    Likes Received:
    18
    Reputations:
    9
    ну просто :) пойдём тагда по 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);}
     
  7. Deem3n®

    Deem3n® RTFMSDN

    Joined:
    19 Sep 2005
    Messages:
    378
    Likes Received:
    153
    Reputations:
    164
    функцию 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();
    }
     
  8. [1Ns]

    [1Ns] Banned

    Joined:
    24 Oct 2005
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Нам недавно тож такое задавали, я делал так:
    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();
    }
    
    
     
Loading...
Similar Threads - Программа проверку строки
  1. Peja
    Replies:
    0
    Views:
    2,873