Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > из "а" в "А"


Автор: DESert 8.12.2005, 01:02
Привет всем!
Заранее извиняюсь за наглость поставленной просьбы:
помоготи написать такую программу, которая все гласные в файле делает прописными.
Или кусок программы, которая находит эти гласные и заменяет их на прописные
Заранее спасибо smile

Автор: bel_nikita 8.12.2005, 01:04
на чем писать будем? smile

Автор: DESert 8.12.2005, 01:13
на Си

Автор: bel_nikita 8.12.2005, 01:37
DOS аль Windowz?
Окрываешь файл, читаешь в буфер(можно и без буфера). Потом бежишь по буферу находишь гласные, преобразуешь. Потом записываешь в файл.

Автор: DESert 8.12.2005, 01:45
Windows...
только вот мне это всё и интересно smile как в буфер весь файл занести, как по нему пробегать... а еще как проверять, что буква гласная?... создать массив гласных и просто проверять, входить ли символ туда?
изменять на прописную, я думаю так:
Код

int UP(int c)
{
   if (c>='A' && c<='Z')
        return c+'A'-'a';
  else
 return c;
}

если честно не проверял

Автор: bel_nikita 8.12.2005, 01:52
Ну, вот так, если долго не думая:
Код

// Действительно только для ASCII
// pch - текущий символ
void IsOurLetter(char& pch)
{
  char Template[] = "aeio"; // шаблон гласных
  // бежим по шаблону
  for (int i = 0; i < sizeof(Template); ++i) 
    if ( Template[i] == pch  )  pch += 32; // если это наша гласная, заменяем её на прописную
}

Автор: DESert 8.12.2005, 01:58
супер! спасибо большое smile
а можешь еще рассказать как иметь дело с буфером, ведь как я понимаю только так можно изменить символы в исходном файле?
Добавлено @ 01:59
а русские символы входят в ASCII ? просто текст на русском

Автор: bel_nikita 8.12.2005, 02:11
Можно посимвольно писать и читать (это если файл большошо объема)
Но проще будет прочитать в буфер сначала, а потом преобразовать этот буфер (это при условии, что файл не большого объема)
Читаешь длину файл. Веделяешь память. Читаешь файл в этот созданый буфер. Пропускаешь буфер через IsOurLetter() и записываешь в файл преобразованный буфер. Усё smile

Чтение файла в буфер:
Код

int LoadFileToMemory(const char* csFileName, PBYTE& pBuffer, size_t& Length)
{
  HANDLE  hFile         = 0;
  DWORD   dwError       = NO_ERROR;
  DWORD   dwSizeFile    = 0;
  DWORD   dwBytesReaded = 0;
  
  hFile = ::CreateFile(csFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

  if ( hFile != INVALID_HANDLE_VALUE && (dwError = ::GetLastError()) == NO_ERROR )
  {
    dwSizeFile = ::GetFileSize(hFile,NULL);
    //Length = dwSizeFile + 1;
    Length = dwSizeFile;
    if ( dwSizeFile != 0xFFFFFFFF && ( dwError = ::GetLastError() ) == NO_ERROR )
    {
      pBuffer = new BYTE[ Length];
      if ( pBuffer )
      {
        if ( ::ReadFile(hFile,pBuffer,Length,&dwBytesReaded,NULL) && ( dwError = ::GetLastError() ) == NO_ERROR )
        {
          // OK
          int a = 0;
          //pBuffer[Length] = EOF;
        }
      }
    }
  }

  dwError = ::GetLastError();

  ::CloseHandle(hFile);  
  return dwError;
}


Основная прога smile :
Код

  PBYTE   pBuffer = 0;
  size_t  Length = 0;
  if ( !LoadFileToMemory( "MyFile.txt", pBuffer, Length ) )
  {
   // файл прочитан, бежим по нашему буферу и пропускаем каждый символ через IsOurLetter
  for(size_t i = 0; i < Length; ++i )
    IsOurLetter(pBuffer[i]); 
  // Теперь можно записать буфер в файл. Запись в файл сам уже сделаешь. Спать охота
  ..
  }
  else
  {
  // ошибка при загрузке файла
  }

Автор: DESert 8.12.2005, 02:14
спасибо большое! smile

Автор: bel_nikita 8.12.2005, 02:14
DESert
Цитата
а русские символы входят в ASCII ? просто текст на русском
Что ж ты раньше молчал? Тогда все через CString лучше делать.
Хотя можно и без CString обойтись. Пофигу, просто у нас будет не char, а unsigned short

P.S.: Извини, но я уже спать...

Автор: DESert 8.12.2005, 02:20
smile глупый вопрос: а какие модулю нужно подключить?
Добавлено @ 02:21
споки smile

Автор: bel_nikita 8.12.2005, 09:35
Замени char на TCHAR. И компиль в UNICODE.
какой компилятор?

Автор: DESert 8.12.2005, 15:24
ой, если бы я знал...
если бы даже знал, как узнать какой компилятор
я прогаю в DEV-CPP

Автор: bel_nikita 8.12.2005, 16:06
Цитата(DESert @ 8.12.2005, 14:24)
я прогаю в DEV-CPP

Упс-с... на таком интсрументе еще не довелось играть smile
Так что, сам смотри, как там компилировать UNICODE

Автор: DESert 8.12.2005, 22:03
там нет никакой помощи и FAQa...
может быть в каком другом инструменте?... например Builder?....

Автор: Лыжник 11.12.2005, 18:32
Код

void smalltobig(char *str){
    static const char 
        *ABC="ABCDEF",
        *abc="abcdef";
    for(;*str;str++){
        for(int i=0;abc[i]&&ABC[i];i++)
            if(*str==abc[i]){
                *str=ABC[i];
                break;
            }
    }
}    


можно примерно так =)

Автор: DESert 13.12.2005, 00:35
ну вот а всё таки непонятно, как изменять сам текст...
как скопировать его в буфер, и извлечь его оттуда... непонятно как это организовать чисто программно
извиняюсь за глупые вопросы smile

Автор: bel_nikita 13.12.2005, 00:50
Цитата(DESert @ 12.12.2005, 23:35)
ну вот а всё таки непонятно, как изменять сам текст...
как скопировать его в буфер, и извлечь его оттуда... непонятно как это организовать чисто программно
извиняюсь за глупые вопросы smile

Ну, вот, что за люди пошли smile
Я ж привел функцию, которая читает файл в буфер. Аль не фурычит в твоем компиляторе?

Автор: DESert 14.12.2005, 15:19
к сожалению не фурычит smile
вообщем вот поэтому и спрашиваю глупые вопросы smile

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