Обсуждение Программирование на C/C++

Народ кто поможет? Мне для полной сдачи курсового нужно написать программу! Напишите кому не лень а то плоховато шарю...
Написать и протестировать функцию strs(str1, str2) которая определяет, встре-тился ли в строке str1 какой-нибудь символ из строки str2. Возвращает функция указатель на первый совпавший символ строк, либо NULL, если совпадающих символов не обнаружено.
 

gureedo

Самец :)
Народ кто поможет? Мне для полной сдачи курсового нужно написать программу! Напишите кому не лень а то плоховато шарю...

PHP:
char* strs(const char*str1, const char* str2)
{
   for(i=0;i<strlen(str2);i++)
      for(j=0;j<strlen(str1);j++)
         if(str1[j] == str2[i]) return &str1[j];

   return NULL;
}
 

    NicKoN

    очки: 0
    спс за прогу С++

ShaDer

Ословед
Ну тогда перерисовывай не все а необходимый регион. У архангельского вроде бы было что-то на эту тему.

Это в Архангельском я читал, помню. Тут именно надо игровое поле на форме с нуля отрисовать целиком, без двойной буферизации мерцает, с ней - тормозит.:idontno:
 
K

Kiruha2008

Удаление файлов из каталогов и подкаталогов

Подскажите, как удалить файлы определенного типа (например, с расширением txt) из каталогов и подкаталогов. При этом, сами каталоги, подкаталоги и другие в них файлы не удаляются. Какие-либо конкретные примеры в литературе и в Интернете не нашел. Но, зато полно примеров, как удалять файлы только из одного каталога с добавлением примерно следующей фразы: «этот же подход используется и для удаления файлов из подкаталогов». Как использовать «этот же подход» у меня немножечко мозга не хватает.

Вот только нашел в Интернете следующее:

Программа "Чистка диска"
Cреда Borland C++ Builder 6



Исходные данные и основные требования: Написать программу, которая

а) будет удалять с указанного устройства все файлы, имеющие расширения BAK и $$$;

б) будет удалять с указанного устройства все файлы имеющие расширения EXE,

если кроме этого будет существовать в этом каталоге и файл с таким же именем,

но с расширением PAS ( или BAS, или C, или FOR), за исключением файлов с именем TURBO.

Код:
#include <stdio.h>
 #include <string.h>
 #include <windows.h>
 #include <conio.h>
 #include <iostream.h>
 #include <vcl.h>
 #include <fcntl.h>
 #include <io.h>
 void FindDir(char* path,char* mask)
 
 {
 
 WIN32_FIND_DATA wfd;
 
 HANDLE hfound;
 
 char newpath[MAX_PATH];
 
 char fpath[MAX_PATH];
 
 strcpy(fpath,path);
 
 strcat(fpath,"\\");
 
 strcat(fpath,mask);
 
 if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)
 
 {
 
 if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
 
 {
 
 //зна?ит нашли первый файл в папке path
 
 //и делаем ?то-нибудь
 
 //fpath                  - здесь думаю разбересся ;)
 
 //wfd.cFileName    - здесь тем более ))
 
 }
 
 while(FindNextFile(hfound,&wfd))
 
 {
 
 if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
 
 {
 
 //зна?ит нашли первый файл в папке path
 
 //и делаем ?то-нибудь
 
 //fpath                  - здесь думаю разбересся ;)
 
 //wfd.cFileName    - здесь тем более ))
 
 }
 
 }
 
 }
 
 FindClose(hfound);//поиск файлов закон?или, теперь ищем подпапки
 
 strcpy(fpath,path);
 
 strcat(fpath,"\\*.*");
 
 if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)
 
 {
 
 if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
 
 {
 
 strcpy(newpath,path);
 
 strcat(newpath,"\\");
 
 strcat(newpath,wfd.cFileName);
 
 FindDir(newpath,mask); //ЭТО НАЗЫВАЕТСЯ "РЕКУРСИЯ"
 
 }
 
 while(FindNextFile(hfound,&wfd))
 
 {
 
 if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
 
 {
 
 strcpy(newpath,path);
 
 strcat(newpath,"\\");
 
 strcat(newpath,wfd.cFileName);
 
 FindDir(newpath,mask); //ЭТО НАЗЫВАЕТСЯ "РЕКУРСИЯ"
 
 }
 
 }
 
 }
 
 }
 
 WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
 
 {
 
 FindDir("C:","*.");
 
  return 0;
 
 }
 
 //------------------------------------------------------------

Помогите превратить это в рабочий код (программу). У меня не получается. Какой код нужно вписать на место следующих комментариев:

//зна?ит нашли первый файл в папке path

//и делаем ?то-нибудь

//fpath - здесь думаю разбересся ;)

//wfd.cFileName - здесь тем более ))



В благодарность за помощь могу выложить следующие реально работающие два кода (может кому нужно, пригодится):

1. Удаляет полностью всю папку с вложенными в нее подпапками и файлами, не помещая в корзину и не показывая различных диалогов, прогрессов и т.п.:

Код:
#include <windows.h>
#include <shellapi.h>

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

char *From = "С:\\Папка1\0";
	

SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.wFunc = FO_DELETE;
op.pFrom = From;
op.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI;

// Если нужны диалоги, «летящие папки» и проч., 
// то сделайте op.fFlags = 0; 

SHFileOperation( &op);


	return 0;
}

2. Копирует полностью всю папку с вложенными в нее подпапками и файлами, не показывая различных диалогов, прогрессов и т.п.:

Код:
#include <windows.h>
#include <shellapi.h>

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

char *From = "С:\\Program Files\\Папка1\0";

char *To   = "D:\\Копия Папка1\0";
			 
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.wFunc = FO_COPY;
op.pFrom = From;
op.pTo   = To;
op.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI; 

// Если нужны диалоги, «летящие папки» и проч., 
// то сделайте op.fFlags = 0; 

SHFileOperation( &op);


	return 0;
}
 
Помогите пожалуйста решить задачку..очень срочно!иии очень нужнО!плиз...:tears:
Дан текст (2–3 строки) в файле F1. Текст состоит из слов, отделенных друг от друга пробелами. Описать функцию, удаляющую из строки слово с номером М (номер слова М один из параметров функции). В вызывающей программе номер слова лучше всего вводить в диалоге. Преобразовать все строки текста, и новый текст записать в файл F2.
:idontno:
 

    Бретон

    очки: 7
    Нет комментариев
читала...разбиралась....вот именно..не спрашивала бы тогда!часть сообразила а часть нет
 
ЦВЗ

Здравствуйте. Вопрос такой: не занимался ли кто нибудь Цифровыми Водяными Знаками (watermarks) в статических изображениях? Курсовую уж сдавать надо, а я все никак не могу найти описание алгоритма :idontno:. Помогите плииз!:shuffle:.
 
I

IVIaX

Стеганографией грузят уже.... Вообще-то алгоритмы сии стоят немаленьких денег, так что даже страно, что ты их найти не можешь... :crazy2:. Сильно много моментов должно быть...
 
Ну раз тема мне дана - значит придумать что то можно. Может кто уже думал...
 
I

IVIaX

Не, придумать-то можно, вопрос в том, насколько соответствовать будет требованиям (там ведь, между прочим, должна быть защита от сжатия с потерями)...
 
Необходимо реализовать ЦВЗ, которое необязательно будет защищено от сжатия с потерями, а хотя бы просто от поворота изображения или изменения яркости
 
I

IVIaX

От изменения яркости - например в каком-то пикселе будет ноль. То есть относительно него можно будет просчитывать остальные (само собой, если увеличить/уменьшить яркость так, что будет приближаться общий цвет к FFFFFF или 000000, то тут никакие знаки не помогут). А от поворота - просто распределить так, чтобы после поворота те же координаты остались... что-то такое.
 
K

Kiruha2008

Удаление файлов из каталогов и подкаталогов

Нашел ответ на свой вопрос.

В Интернете нашел следующее:

Код:
Поиск файлов 


Функция поиска файлов по маске в заданной и вложенных папках.
BOOL SearchFiles(
        LPCTSTR lpszFileName,                // Директория и маска файлов для поиска
        LPSEARCHFUNC lpSearchFunc,            // Функция, вызываемая для всех найденных файлов.
        BOOL bInnerFolders /* = TRUE */)    // TRUE - поиск в подпапках. 
                                            // FALSE - поиск только в заданной папке




typedef void (*LPSEARCHFUNC)(LPCTSTR lpszFileName);

BOOL SearchFiles(LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL bInnerFolders = TRUE)
{
    LPTSTR part;
   char tmp[MAX_PATH]; // временный массив
    char name[MAX_PATH];

   HANDLE hSearch = NULL;
   WIN32_FIND_DATA wfd;
    memset(&wfd, 0, sizeof(WIN32_FIND_DATA));

    // сначало поиск внутри вложенных папках ...
    if(bInnerFolders)
    {
        if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) return FALSE;
        strcpy(name, part);
        strcpy(part, "*.*");

        // если папки существуют, то делаем поиск
        wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
        if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
        do
        {
            // в каждой папке есть две папки с именами "." и ".."
            // и эти папки мы не трогаем

            // пропускаем папки "." и ".."
            if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))            
           continue;
       
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если мы нашли папку
            {
                char next[MAX_PATH];
                if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
                strcpy(part, wfd.cFileName);
                strcat(next, "\\");
                strcat(next, name);

                SearchFiles(next, lpSearchFunc, TRUE);
            }
        }
        while (FindNextFile(hSearch, &wfd)); // ищем следующий файл

        FindClose (hSearch); // заканчиваем поиск
    }

   if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE) 
       return TRUE; // в противном случае выходим
   do
   if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // если мы нашли файл
   {
        char file[MAX_PATH];
        if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
        strcpy(part, wfd.cFileName);

        lpSearchFunc(file);
   }
   while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
   FindClose (hSearch); // заканчиваем поиск

    return TRUE;
}
Пример 1. 
Поиск всех файлов с расширением txt в папке "C:\Dir1" и вложенных в нее папках.
SearchFiles("C:\Dir1\*.txt", DoSomething, TRUE);
Пример 2. 
Поиск всех файлов с именем name и любым расширением только в папке "C:\Dir1"
SearchFiles("C:\Dir1\name.*", DoSomething, FALSE);
Пример функции DoSomething
void DoSomething(LPCTSTR lpszFileName)
{
    MessageBox(NULL, lpszFileName, "Find File", MB_OK | MB_APPLMODAL);
}

И вот так я сделал (работает так как надо, конкретно):

Код:
//---------------------------------------------------------------------------


#include <windows.h>


typedef void (*LPSEARCHFUNC)(LPCTSTR lpszFileName);
void DoSomething(LPCTSTR lpszFileName);

BOOL SearchFiles(LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL bInnerFolders = TRUE)
{
    LPTSTR part;
   char tmp[MAX_PATH]; // временный массив
   char name[MAX_PATH];

   HANDLE hSearch = NULL;
   WIN32_FIND_DATA wfd;
    memset(&wfd, 0, sizeof(WIN32_FIND_DATA));

    // сначало поиск внутри вложенных папках ...
    if(bInnerFolders)
    {
        if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) return FALSE;
        strcpy(name, part);
        strcpy(part, "*.*");

        // если папки существуют, то делаем поиск
        wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
        if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
        do
        {
            // в каждой папке есть две папки с именами "." и ".."
            // и эти папки мы не трогаем

            // пропускаем папки "." и ".."
            if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))            
           continue;
       
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если мы нашли папку
            {
                char next[MAX_PATH];
                if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
                strcpy(part, wfd.cFileName);
                strcat(next, "\\");
                strcat(next, name);

                SearchFiles(next, lpSearchFunc, TRUE);
            }
        }
        while (FindNextFile(hSearch, &wfd)); // ищем следующий файл

        FindClose (hSearch); // заканчиваем поиск
    }

   if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE) 
       return TRUE; // в противном случае выходим
   do
   if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // если мы нашли файл
   {
        char file[MAX_PATH];
        if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
        strcpy(part, wfd.cFileName);

        lpSearchFunc(file);
   }
   while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
   FindClose (hSearch); // заканчиваем поиск

    return TRUE;
}


WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{


SearchFiles("C:\\Новая папка1\\*", DoSomething, TRUE);
SearchFiles("D:\\Папка25\\*.doc", DoSomething, TRUE);

		 return 0;
}

void DoSomething(LPCTSTR lpszFileName)
{
	DeleteFile(lpszFileName);

 }

//---------------------------------------------------------------------------
 
I

IVIaX

Что-то сильно сложно... в предыдущем примере надо было просто маску поставить.
 

Sashka_74@

Ословед
Помогите пожалуйста решить одну задачку!!! нужно написать одну программу на С которая будет "распаковывать" строку типа A4B3C7 в строку AAAABBBCCCCCCC. строка вводится с клавиатуры и выводится на экран
 
Помогите пожалуйста решить одну задачку!!! нужно написать одну программу на С которая будет "распаковывать" строку типа A4B3C7 в строку AAAABBBCCCCCCC. строка вводится с клавиатуры и выводится на экран
на с++... надеюсь, не критично...
Можно так:
Код:
#include <iostream>
int main(int argc, char *argv[])
{
  int i, j;
  std::string inputString;
  const char *tempArray;
  std::cin >> inputString;
  try
  {
    tempArray = new char[inputString.length()+1];
  }
   catch (std::bad_alloc)
   {
      std::cout << "Could not allocate. Bye ...";
      exit(-1);
   }
  tempArray = inputString.c_str();
  for(i = 0; i < inputString.length(); i++)
  {
     if( (tempArray[i] > 64 && tempArray[i] < 91) || (tempArray[i] > 96 && tempArray[i] < 123) )
      {
        if( (((int)tempArray[i+1]-48) >= 0) && (((int)tempArray[i+1]-48) < 10))
        {
          for(j = 0; j < (tempArray[i+1] - 48); j++)
             std::cout << tempArray[i];
        }
        else 
        {
          std::cout << "\nIncorrect format of a line" << std::endl;
          break;
        }
      }
  }
  std::cout << std::endl;
  delete[] tempArray;
  std::cin.get();
  return 0;
}

Только здесь и строчные буквы прокатывают. Если не хочешь, чтобы они выводились - убери условие || (tempArray > 96 && tempArray < 123) .
 

    Sashka_74@

    очки: 7
    Спасибо за задачку)

    Archy

    очки: 16
    :)

Sashka_74@

Ословед
Теперь трудности с переводом на С появились))может еще ктонибуть поможет))
 
Теперь трудности с переводом на С появились))может еще ктонибуть поможет))
А какие именно трудности, береш вместо Iostream делаеш stdio и затем соответствено ввод и вывод производиш при помощи функции stdio и еще выкинь нафиг исключения из исходного кода, и все должно заработать
 
Сверху