Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Нужна помощь в проге (нахождение слова в тексте)


Автор: ARTIDESh 8.4.2011, 17:21
Си!!!!!!!!!!!!!

привет, помогите пожалуйста   с программой....
нужно найти в тексте слово начинающееся с заглавной буквы и в итоге чтоб оно стало полностью большими. (Привет всем-> ПРИВЕТ всем). у меня не получается объявить алфавит программе..чет не могу понять как сделать...пытался целый алфавит перечислить даже через if и тд..все равно чет не выходит(( текст любой...можно чтоб из файла читал..или просто вводом строки через fgets

Автор: Vard 8.4.2011, 17:44
Цитата(ARTIDESh @ 8.4.2011,  17:21)
Си!!!!!!!!!!!!!

привет, помогите пожалуйста   с программой....
нужно найти в тексте слово начинающееся с заглавной буквы и в итоге чтоб оно стало полностью большими. (Привет всем-> ПРИВЕТ всем). у меня не получается объявить алфавит программе..чет не могу понять как сделать...пытался целый алфавит перечислить даже через if и тд..все равно чет не выходит(( текст любой...можно чтоб из файла читал..или просто вводом строки через fgets

посмотрите ctype.h

int islower(int);
isupper кажется тоже есть

Автор: ARTIDESh 8.4.2011, 17:51
нужно сделать  с <stdio.h>, но вопрос еще в том..как найти слово в тексте..вообще ума не приложу...мозг уже месяц ломаю

Автор: triclosan 8.4.2011, 17:57
Vard, а как у него с кириллицей?

Автор: Vard 8.4.2011, 18:10
Цитата

нужно сделать  с <stdio.h>, но вопрос еще в том..как найти слово в тексте..вообще ума не приложу...мозг уже месяц ломаю


было условие использовать только один заголовочный файл?

как найти слово в тексте... тут и годы сложить можно
слова обычно как разделяются? пробелами, знаками препинания, не знаю чем еще, думаю достаточно

Цитата

Vard, а как у него с кириллицей?


Плохо, согласен!

Автор: ARTIDESh 8.4.2011, 18:25
пробелами....но незнаю как это описать....как ему найти пробел и сказать что до него было слово....

Автор: миг 8.4.2011, 18:48
Цитата(ARTIDESh @  8.4.2011,  18:25 Найти цитируемый пост)
пробелами....но незнаю как это описать....как ему найти пробел и сказать что до него было слово..

if(ch[i]==' ')
 говорим, что нашли конец слова))

Автор: bsa 9.4.2011, 09:39
Код
int is_bcyr(char c)
{
   return (c >= 'А') && (c <= 'Я');
}
int is_blat(char c)
{
   return (c >= 'A') && (c <= 'Z');
}
int main()
{
   char buf[256];
   int i;
   int up = 0;
   int beg = 1;
   fgets(buf, sizeof(buf), stdin);
   for(i = 0; buf[i]; ++i) {
      char c = buf[i];
      if ((c < '0') { //this is a hack - most delimiters has ASCII codes less than symbol '0'
        beg = 1;
        up = 0;
      } else if (beg) {
         if (is_blat(c) || is_bcyr(c))
            up = 1;
         else
            up = 0;
         beg = 0;
      } else if (up) {
          if (is_slat(c))
             c = c & 0x5f;
          else switch(c) {
          case 'а':
             c ='А';
             break;
          case 'б':
             c = 'Б';
             break;
          ...
          case 'я':
             c = 'Я';
             break;
          default:;
          }
          buf[i] = c;
      }
   }
   return 0;
}
Программа написана тут не полностью. Надо дописать.

Автор: ARTIDESh 9.4.2011, 11:09
f что такое int is_bryc(char c) ?? скажите пожалуйста..

Автор: миг 9.4.2011, 11:16
ARTIDESh, похоже, что это функция.

Автор: ARTIDESh 9.4.2011, 11:26
хочется знать что она делает))))

Автор: bsa 9.4.2011, 11:44
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Dov 9.4.2011, 15:04
Код
int main()
{
    char str[] = "Privet vsem";    
    
    for(char * p = str + 1; *p; p++)
        if(*(p - 1) >= 'A' && *(p - 1) <= 'Z')
            while(*p >= 'a' && *p <= 'z')
                *p++ -= 32;
    puts(str);
    
    return 0;
}

Автор: ARTIDESh 9.4.2011, 16:05
а что такое *р ? что она делает
просто я  в таких делах не бум бум..если можно объясните что к чему)))

Автор: Dov 9.4.2011, 18:53
Это указатель, он хранит адрес той переменной, на которую указывает. Но я думаю, что это тебе не очень-то поможет.

Цитата(ARTIDESh @  9.4.2011,  16:05 Найти цитируемый пост)
просто я  в таких делах не бум бум..если можно объясните что к чему))

Если ты такой, то сделай по-проще, а если и так не поймёшь, то тебе ещё рано задавать здесь вопросы, сначала теорию поштудируй, книжки почитай, а потом приходи и спрашивай...  Удачи.  smile 
Код
int main()
{
    char str[] = "Privet vsem";    
    
    for(int i = 1; str[i] != '\0'; i++)
        if(str[i - 1] >= 'A' && str[i - 1] <= 'Z')
            while(str[i] >= 'a' && str[i] <= 'z')
                str[i++] -= 32;
    puts(str);
            
    return 0;
}

Автор: ARTIDESh 10.4.2011, 02:53
Цитата(bsa @ 9.4.2011,  09:39)
Код
int is_bcyr(char c)
{
   return (c >= 'А') && (c <= 'Я');
}
int is_blat(char c)
{
   return (c >= 'A') && (c <= 'Z');
}
int main()
{
   char buf[256];
   int i;
   int up = 0;
   int beg = 1;
   fgets(buf, sizeof(buf), stdin);
   for(i = 0; buf[i]; ++i) {
      char c = buf[i];
      if ((c < '0') { //this is a hack - most delimiters has ASCII codes less than symbol '0'
        beg = 1;
        up = 0;
      } else if (beg) {
         if (is_blat(c) || is_bcyr(c))
            up = 1;
         else
            up = 0;
         beg = 0;
      } else if (up) {
          if (is_slat(c))
             c = c & 0x5f;
          else switch(c) {
          case 'а':
             c ='А';
             break;
          case 'б':
             c = 'Б';
             break;
          ...
          case 'я':
             c = 'Я';
             break;
          default:;
          }
          buf[i] = c;
      }
   }
   return 0;
}
Программа написана тут не полностью. Надо дописать.

спс..код помог)) переделал...

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