Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Убрать в каждом слове после запятой до состых


Автор: antigrom 3.12.2008, 05:20
 Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Удалить из каждой группы идущих подряд более двух цифр, которой предшествует точка, все цифры начиная с третьей (например, 5+0.1234-98.54+123.4 преобразуется в 5+0.12-98.54+123.4).

Писать надо в буилдере Консол Визард

Я сделал так чтобы прога убирала все после третьей цифры в последнем введеном слове...а дальше ну хоть убей не могу решить и все ... 

1)

#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
//---------------------------------------------------------------------------

#pragma argsused
int main()
{
char a_string[100],b_string[100],word[40]="";
cout<<"imput the stging:"<<endl;
gets(a_string);
int j=0;
int len=strlen(a_string);
for(int i=0;i<len;i++)
 {
 if((a_string[i-3]!=',')&&(i!=len))
  word[j++]=a_string[i];
  else
   {
    cout<<word;
    j=0;
   }
 }
getch();
}


2)тут я пытался проверить на числа введеные слова и мне надо сделать так что прога при проверке после запятой убирала все символы после 3 цифры... подмогните......очь прошу...


#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
//---------------------------------------------------------------------------

#pragma argsused
int main()
{
char a_string[100],word[40]="";
cout<<"imput the stging:"<<endl;
gets(a_string);
int j=0;
int len=strlen(a_string);
for(int i=0;i<len;i++)
 {
 if (a_string[len]=0||1||2||3||4||5||6||7||8||9)
 {
   if(a_string[i]!=',')
   {
   if ((a_string[i+2]=='0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')&&(i!=len))
     word[j++]=a_string[i];
   else


    j=0;

   }
 }
  cout<<word;
 }
getch();
}



//---------------------------------------------------------------------------

Автор: mes 3.12.2008, 06:02
Цитата(antigrom @  3.12.2008,  05:20 Найти цитируемый пост)
if (a_string[len]=0||1||2||3||4||5||6||7||8||9)

1. == a не =
2. if (a_string[len]=='0' || a_string[len]=='1' ...  ) 
или
   if (a_string[len]>='0' && a_string[len]<='9 )

Автор: mrbrooks 3.12.2008, 08:51
 smile студенты поперли. чувствуется что сессия на носу. гы. 

Автор: xvr 3.12.2008, 10:52
Код


enum State {
 S_Start,
 S_Count,
 S_Block
};

int main()
{
  char ch;
  int cnt=0;
  State state=S_Start;

  while(cin >> ch)
   {
     switch(state)
      {
        case S_Start: if (ch==',' || ch=='.') {state=S_Count; cnt=0;} break;
        case S_Count: if (!isdigit(ch)) {state=S_Start; break;}
                      if (cnt<3) ++cnt; else state=S_Block;
                      break;
        case S_Block: if (!isdigit(ch)) {state=S_Start; break;}
                      continue;
      }
     cout << ch;
   }

  return 0;
}

include'ы и std:: добавить по вкусу

Автор: antigrom 3.12.2008, 11:21
чего не получается
прога циклится и выводит постоянно первое число 
если не трудно объясните что и как делать
а лучше если коментарий оставите что делает каждый оператор...


#include <iostream>
#include <conio.h>
#include <locale>
#include <ctype.h>
enum State
{
 S_Start,
 S_Count,
 S_Block
};

int main()
{
  char ch;
  int cnt=0;
  State state=S_Start;
  std::cin>>ch;
 while(ch)
   {
     switch(state)
      {
        case S_Start: if (ch==',' || ch=='.') {state=S_Count; cnt=0;} break;
        case S_Count: if (!isdigit(ch)) {state=S_Start; break;}
                      if (cnt<3) ++cnt; else state=S_Block;
                      break;
        case S_Block: if (!isdigit(ch)) {state=S_Start; break;}
                      continue;
      }
    std:: cout << ch;
   }

  return 0;
}

Автор: xvr 3.12.2008, 20:33
Переборщил с std:: по вкусу  smile 
вот это
Код

 std::cin>>ch;
 while(ch)

должно быть таким
Код

 while(std::cin>>ch)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)