ss88,Не люблю копаться в чужих кодах.... Давай на словах. Имеется в виду, что надо сосканировать предложение, разбить на слова и... а дальше чо? "Заностится в бинарно дерево" по какому принципу? Если просто слова по-порядку, то просто забить слова в структуру (массив), а дальше их печатать в виде дерева (всмысле в каждой строке увеличиваем колличество распечатываемых слов в 2 раза). В этом коде слишком муторно разбираться...
PHP: char * newInt = new char[20]; newInt = "sdfdsfsdfdsf"; cout << newInt << endl; for(int i=0; i < 300; i++, newInt++) cout << *newInt; учу С++ по книжке, есть вопрос. первый цаут выводит полную строку, а второй - и после самой строки там непечатных символа, которые никак не копируются. Скажите, куда эт я залез и если изменить эту информацию по указателю - могу ли я испортить работу другой программы или подвесить свою? Свободная память для каждой программы своя?
У каждого процесса свое виртуальное адрессное пространство, читаем про виртуальный режим. У тебя строка sdfdsfsdfdsf длинной 12 символов, а ты выводишь данные за указателем тк i < 300 (а именно все то что лежит за этой строкой) Так же у тебя будет тут утечка памяти вот тут Так как ты указателю который указывает на выделенную в куче память присваиваешь адрес строки которая лежит в локальном стеке ф-ции, то теряется выделенный блок памяти, правильно сделать так: Code: strcpy(newInt, "sdfdsfsdfdsf"); тогда наша строка будет лежать в куче. Также не забываем вызывать delete/delete[] после того как выделенная память не нужна.
Помогите составить программу на Си, которая бы открывала текстовый файл с набором русских английских симовлов и цифр и выводила всё кроме 0-9 A-Z и a-z Я попытался сделать вот так (программа выводящая все символы кроме 0 и 1), но что-то не работает (( Code: #include <stdio.h> #include <string.h> #define file "C:\\aq.txt" main() {FILE * pfr; char m[200]; pfr=fopen(file,"r"); if (pfr==NULL) {printf("ошибка при открытии"); exit(-1);} while (fgets(m,200,pfr)!=NULL); {int i,j; M1: if (m[i]!='0' || m[i]!='1'); // если символ неравен 0 или 1, то printf("%S %d", m, i); // вывести его esle (m[i]=m[i+1]); // иначе - перейти к следующему символу goto M1; // вернуться к проверке этого символа } }
Mosvit 1. main() - должна возвращать тип int и иметь в конце return 1; 2. после while сразу стоит ; 3. int i,j; не надо объявлять в цикле 4. вместо goto как раз таки используется while и ещё:
Если не напутал, то вот поидее Code: #include <stdio.h> void main() { FILE *in; char ch; in = fopen("in.txt", "r"); while(ch != EOF) { ch = fgetc(in); if((ch < 48 || ch > 57) && (ch < 65 || ch > 90) && (ch < 97 || ch > 122)) printf("%c", ch); } fclose(in); }
PHP: // создал указатель (?) на поток ifstream infile; // открыл файл infile.open ("C:\\file2.txt"); // пытаюсь получить размер файла int size = filesize(infile); int filesize(ifstream infile){ infile.seekg(0, ifstream::end); int size = infile.tellg(); infile.seekg(0); return size; }; но не получается. ошибка в строке PHP: int size = filesize(infile); // initializing argument 1 of `int filesize2(std::ifstream)' как передать этот указатель в функцию, чтобы она определила размер файла?
Если нужно заменить все вхождения то так: Code: string s="BugblablaBugBug blabla BuBuggBug"; string oldS="Bug"; string newS=""; int last=0,i; while (i=s.find(oldS,last),i!=string::npos) last=i+newS.size(), s.replace(i,oldS.size(),newS);
Юзай поиск в инете Для ленивых вот: Code: // Функция заменяет в строке Src подстроку Str1 на Str2 char* Replace(char* Src,char* Str1, char* Str2) { int cStr1=0,cStr2=0,i; char* buffer; buffer = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,lstrlen(Src)*2); while (Str1[cStr1]) cStr1++; // считаем размер while (Str2[cStr2]) cStr2++; // строк, можно и через lstrlen i = InStr(&Src[0],&Str1[0]); while(i != 0) { lstrcpyn(&buffer[lstrlen(buffer)],&Src[0],i); lstrcat(&buffer[0],&Str2[0]); lstrcpy(&Src[0],&Src[i+cStr1-1]); i = InStr(&Src[0],&Str1[0]); } lstrcat(&buffer[0],&Src[0]); lstrcpy(&Src[0],&buffer[0]); HeapFree(GetProcessHeap(),HEAP_NO_SERIALIZE,buffer); return Src; }
PHP: char *str; cin >> str; char *mm = strcpy(str, "free"); cout << mm; почему-то выводит "free".. а где то, что я поместил в str?
strcpy(str, "free"); помещение строки "free" по адресу str если хочешь чтобы было и то и другое, то юзай strcat для сложения строк
Да, спасибо! Всё работает. Только в начале не void main() походу а int main() В условии цифры это какие-то коды символов получается? А можно ещё как-нибудь сделать запись полученого результата в текстовый файл, а то русский шрифт полохо отображается в программе? =)
Напиши в консоле >> file.txt или в коде допиши запись в другой файл. Зачем писать int main если функция ничего не возвращает?
Ну вашу ж мать... ну кто так делает? и как так вообще можно? какого хрена оно вообще работает.. это ж.. короче, по пунктам: 1)юзинг неинициализированной переменной в ch 2)в случае достижения eof-а всё равно пытаемся что-то вывести 3)ну вот обязательно надо всё не по человечески сделать: вот что тебя сподвигло на написание "<48" вместо "<'0'"? фикс этого кода, убивающий критические баги 1 и 2: Code: #include <stdio.h> void main() { FILE *in; char ch; in = fopen("in.txt", "r"); while((ch = fgetc(in)) != EOF) { if((ch < 48 || ch > 57) && (ch < 65 || ch > 90) && (ch < 97 || ch > 122)) printf("%c", ch); } fclose(in); }
Я как бэ не программист по образованию и даже не интересующийся (особенно с++), ну да ладно... Приведи практический пример, когда мой вариант повлечет за собой ошибку ascii коды сподвигли
Зачем изобретать велосипед когда он уже сделан? Code: #include <stdio.h> #include <ctype.h> int main() { FILE *in; char ch; in = fopen("in.txt", "r"); while(ch != EOF) { ch = fgetc(in); if(!isalnum(ch)) { printf("%c", ch); } } fclose(in); return 0; }