Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

21.05.2009, 21:22
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
он юзает команды strlen, strtok они нафиг не нужны ) зачем разбитвать строку на слова?
встретил цифру заменил ) встретил точку поставил перенос строки... все
fseek(f, 0, SEEK_END);
buflen = ftell(f);
rewind(f);
определяем скока байт файл занимает
buffer = (unsigned char * ) malloc(buflen); выделяем памяти под весь файл и туда считываем файл все... терь файл в памяти
побайтово движемся по памяти - файлу. если точка ставим перенос строки
если не точка
преобразовываем в цифру если от нуля до 9 то вместо этого пишем слово из массива num а если не цифра просто печатаем этот символ ) усе...
но я думаю можно круче сделать если напрямую указатель прибавлять ) тогда si не понадобится + можно еще несколько переменных убрать а то че они лишние хех
|
|
|

21.05.2009, 21:29
|
|
Участник форума
Регистрация: 04.05.2007
Сообщений: 267
Провел на форуме: 409147
Репутация:
33
|
|
вооо пашет, вот тока бы чтоб каждое предложение с новой строки, это видимо, если находит точку, то перескакивает на новую строку походу...
|
|
|

21.05.2009, 21:47
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Некрасиво конечно, но проще уже точно некуда
Код:
#include <iostream>
#include <fstream>
#include <ctype.h>
#include <string>
using namespace std;
int main () {
string line;
string filename;
cout << "Vvedite imja/putj fajla\n";
cin >> filename;
ifstream file(filename.c_str());
if (file.is_open()) {
while (!file.eof()) {
getline(file, line);
for (int i = 0; i < line.length(); i++ ) {
if (isdigit(line.at(i))) { // vidim cifru, vivodim ee
switch (atoi(line.substr(i, 1).c_str())) {
case 0:
cout << "NOLJ";
break;
case 1:
cout << "ADZIN";
break;
case 2:
cout << "DVA";
break;
case 3:
cout << "TRI";
break;
case 4:
cout << "CETIRE";
break;
case 5:
cout << "PJATJ";
break;
case 6:
cout << "SSESTJ";
break;
case 7:
cout << "SEMJ";
break;
case 8:
cout << "VOSEMJ";
break;
case 9:
cout << "DEVATJ";
break;
}
}
else if (line.at(i) == 46) { // vidim tochku t.e. konec stroki vivodim ee i novuju stroku
cout << line.at(i) << endl;
}
else { // vivodim vso ostalnoje
cout << line.at(i);
}
}
}
file.close();
}
else {
cout << "Oshibka pri otkritii fajla " << filename << endl;
}
return 0;
}
|
|
|

21.05.2009, 22:02
|
|
Участник форума
Регистрация: 04.05.2007
Сообщений: 267
Провел на форуме: 409147
Репутация:
33
|
|
Сообщение от rudvil
Некрасиво конечно, но проще уже точно некуда
Код:
#include <iostream>
#include <fstream>
#include <ctype.h>
#include <string>
using namespace std;
int main () {
string line;
string filename;
cout << "Vvedite imja/putj fajla\n";
cin >> filename;
ifstream file(filename.c_str());
if (file.is_open()) {
while (!file.eof()) {
getline(file, line);
for (int i = 0; i < line.length(); i++ ) {
if (isdigit(line.at(i))) { // vidim cifru, vivodim ee
switch (atoi(line.substr(i, 1).c_str())) {
case 0:
cout << "NOLJ";
break;
case 1:
cout << "ADZIN";
break;
case 2:
cout << "DVA";
break;
case 3:
cout << "TRI";
break;
case 4:
cout << "CETIRE";
break;
case 5:
cout << "PJATJ";
break;
case 6:
cout << "SSESTJ";
break;
case 7:
cout << "SEMJ";
break;
case 8:
cout << "VOSEMJ";
break;
case 9:
cout << "DEVATJ";
break;
}
}
else if (line.at(i) == 46) { // vidim tochku t.e. konec stroki vivodim ee i novuju stroku
cout << line.at(i) << endl;
}
else { // vivodim vso ostalnoje
cout << line.at(i);
}
}
}
file.close();
}
else {
cout << "Oshibka pri otkritii fajla " << filename << endl;
}
return 0;
}
НАДО ДЛЯ Borland C++ 3.1 а не 6.0 ...=\ писал же ..((
|
|
|

22.05.2009, 10:53
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
И нравится вам юзать компилер, которому 20 лет и который не поддерживает современный C++.
Купи нетбук и поставь нормальную IDE, либо на флешку Code::Blocks запиши, он без установки пашет.
|
|
|

22.05.2009, 11:37
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
2 nerezus
у чувака криворукие у него даж норманый рабочий исходник на Си не пашет
потом тему завел Си... а на самом деле ему нужна прога на Си++
в общем ппц
|
|
|

23.05.2009, 10:09
|
|
Участник форума
Регистрация: 04.05.2007
Сообщений: 267
Провел на форуме: 409147
Репутация:
33
|
|
PHP код:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define fname "inpt.txt"
void print_wrd(char *);
void main()
{
clrscr();
char *cfr[]={"HOJIb","oDbIH","DBa","Tpu","4eTbIpu","n9Tb", "6ecTb","CeMb","BoceMb","DeB9Tb"};
FILE *fPtr;
char *str[20],*wrd[30];
int i=0,j=0,n,c;
if((fPtr=fopen(fname, "rt"))==NULL){
printf("File could not be open =(\n");
getch();
return;
}
else{
fgets(str[i],50,fPtr);
//printf("%s",str[i]);
while(!feof(fPtr)){
i++;
fgets(str[i],50,fPtr);
//printf("%s",str[i]);
}
fclose(fPtr);
}
for(int k=0; k<=i; k++){
n=strlen(str[k]);
for(j=0; j<=n; j++){
c=str[k][j];
if(c>='0'&&c<='9')
printf(" %s",cfr[c-48]);
else
printf("%c",c);
}
printf("\n");
}
getch();
}
кто может его подправить чтобы КАЖДОЕ предложение,9т.е. если найдётся точка, выводилось с новой строки
счас выводит из получаемого
TExt 1 2. TExt 2 3. 3 3
получает
Text odin dva. TExt dva tri. tri tri
а надо именно
Text odin dva.
TExt dva tri.
tri tri вот. автор вышеперечисленного кода получит семизнак, как тока установлю на компе винду =\ а тот кто исправит тоже. че я жадина чтоли
|
|
|

23.05.2009, 11:56
|
|
Участник форума
Регистрация: 31.10.2007
Сообщений: 213
Провел на форуме: 394522
Репутация:
14
|
|
По моему самый простой вариант перехода на новую строку ето в цыкле вставить проверку :
Код:
if ( str[k] == '.' )cout<<endl;
При такой проверке как только встретится точка курсор прыгнет на новую строку !
Да и вообще код какойто масивный для даного задания .... можно и попроще )
Я в разделе "Студентам с лабами" сделал ето заданице ))) Для проверку на точку в тот код просто вставь :
Код:
case '.' :
cout<<endl;
break;
|
|
|

23.05.2009, 18:49
|
|
Познавший АНТИЧАТ
Регистрация: 13.04.2006
Сообщений: 1,738
Провел на форуме: 5151669
Репутация:
1198
|
|
про переход на новую строку. пихни в #27
Код:
...................
c=str[k][j]; c1=str[k][j-1];
switch(c1) { case '.': printf("\n"); break; }
if(c>='0'&&c<='9') {
..............
ну и c1 задай.. вроде похоже на правду.
|
|
|

26.05.2009, 13:42
|
|
Участник форума
Регистрация: 26.11.2008
Сообщений: 158
Провел на форуме: 2816163
Репутация:
158
|
|
интересно ТС сдержал свое слово... Кому отправилась семерка?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|