rdsn читай , там лучше книг расписано вот надо потоки там начиная от теории и до примеров и функц. Хотя в QT оч няшная справка но это QT(
Qt кросс-платформенный. Выучишь Qt, сможешь писать для линукс, виндоус, симбиан, миго... Выучишь win api(это не просто) сможешь писать только для виндоус.
Там справочник ну оч хороший, ищеш имя класса под нужные задачи вбиваеш в хелп смотрешь свойства, методы класса, и все единственное надо ООП понимать хорошо.
Стоит или нет Всем античатовцам привет.Подскажыте стоит ли изучать мне С++, если я начинающий в етом деле.Сначала начал изучать Perl,но он мне не подуше.Или нестоит начинать с сложных ЯП.Буду рад любому совету.
программа на си Code: int main(void) { int x,i; scanf("%d",&x); i=8*sizeof(int); while(i--) { (x&1)?printf("1"):printf("0"); x>>=1; } } как сделать чтобы выводимое двоичное число начиналось с младшего бита? никак не могу понять.
Помогите по созданию буфера для findfirstfile. Я так понимаю, ошибка в том, что в буфер попадают левые данные, но закрыть его грамотно нуллбайтом не могу почему-то. Вот код: Code: #include <windows.h> #include <iostream.h> int findF(char stardDir[]) { HANDLE hFindFile; WIN32_FIND_DATA fd; char buf[256]; char mask1[]="*.*"; lstrcpy(buf,stardDir); lstrcat(buf,mask1); int i,y; i = strlen(stardDir); y = strlen(mask1); buf[i+y]=0x00; ;пробовал просто 0, бестолку cout <<endl << buf ; hFindFile = FindFirstFile(stardDir,&fd); if (hFindFile == INVALID_HANDLE_VALUE) { cerr << endl << "error opening file! \n"<< GetLastError () << "press any key to finish \n"; cin.get(); return 0; } while (FindNextFile(hFindFile,&fd)) { if ((fd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) && (lstrcmp(fd.cFileName,"..")==TRUE)) // && fd.cFileName!='..') { findF("F:\\Demod\\"); } cout << "the file name:" << fd.cFileName << endl; } FindClose(hFindFile); return 0; } int main() { findF("F:\\Demod\\"); return 0; }
1. Нет проверки длины stardDir. buf может и разорвать от большого размера. 2. Зачем терминировать буфер, если он уже терминированный? 3. Неправильная индексация buf[i+y] перетирает последний элемент, а не терминирует буфер.
tim-oleksii В данном случае прога тестовая, это не столь опасно. Но спасибо за совет, учту. т.е. в Си не надо, как в Ассемблере, добавлять вручную нуллбайт к концу буфера? А почему? Например stardDir занимает 11 байт, маска - еще три. Всего 14. Если нумерация идет от нуля, то они размещены в байтах 0..13, значит 14 байт буфера должен быть нуллбайтом. Или где я ошибся? + по рекурсии - не могу понять, как мне грамотно сделать, чтобы искало в подкаталогах. В функцию рекурсивно надо передавать fd.cFileName и буфер? Но тогда этих буферов будет очень много, если каждый раз функция будет создавать свой буфер, памяти много займет. Если же передавать указатель на буфер - тогда подфункция будет перезаписывать его постоянно. Не могу что-то логически понять, как это грамотно сделать, сам алгоритм.
Здравствуйте, нужно найти все уникальные числа в строке - вводятся целые числа например 123456786 - тут цифра 6 повторяется .. и ответ дожен быть 8 тоесть минус повторение ... код понятно что не правильный...спасибо. Code: #include <iostream> #include <conio.h> using namespace std; int main(int argc, char* argv[]){ char *ch = new char[20]; int sum=0; system("echo ..."); cout << "Write:> "; for(int i=0;i<20;i++){ ch[i]=' '; } cin >> ch; for(int j=0;j<strlen(ch);j++){ for(int i=0;i<strlen(ch);i++){ if(ch[j]!=ch[i]){ sum = sum + 1; } } } system("echo ... )"); cout << "Result: " << sum; cin.get(); cin.get(); delete [] ch; return 0; }
Что-нибудь типа Code: #include <iostream> #include <string> #include <algorithm> int main() { std::string input; std::string::iterator i; std::cout<<"Your string: "; std::cin>>input; std::sort(input.begin(), input.end()); i = std::unique(input.begin(), input.end()); input.resize(i - input.begin()); std::cout<<input.size(); return 0; }
Вот: PHP: #include <iostream> #include <conio.h> #include <string> using namespace std; int main(int argc, char* argv[]){ string ff; system("echo ..."); cout << "Write: "; cin>>ff; for(int CountOfSize = 0; CountOfSize < ff.length(); CountOfSize++) { for(int go = CountOfSize +1; go < ff.length(); go++) { if(ff[CountOfSize]==ff[go]) { ff.erase(go,1); cout<<ff<<"\n"; go--; } } } cout<<"Uniqe string:"<<ff; cout <<"\n Amount of uniqe:"<<ff.length()<<"\t"; cin.get(); cin.get(); return 0; }
Спасибо за код) ... не подскажите статьй или описания по работе с типом string, я имею ввиду string.lenght и остальные ... заранее спасибо, так как ищу и нашел всего пару функций...
Надо. В сях такая же концепция нультерминированных строк. Другое дело, что strcat/lstrcat терминирует их по умолчанию. strlen возвращает длину строки без терминатора. На строки strlen вернет F:\\Demod\\ - занимает 9 байт. *.* - 3 байта. С терминаторами их длины 10 и 4 байта соответственно. Их конкатенация занимает 12 байт. С терминатором 13. Для рекурсии можно использовать SHFileOperation.