przepisywanie wiadomości

0

Dlaczego ktoś wyrzucił mój temat do kosza? Ja zadałem tylko pytanie czy jest mozliwe przepisanie bez zmiany miejsc liter w pliku? Pytam tylko o poradę. Czy ktoś mógłby to sprawdzić?

Mam napisać program, który przepisuje do pliku wszystkie znaki poza dużymi literami. Napisałem, ale program nie zostawia przepisywanych znaków na tej samej pozycji. Dlaczego?
Czy ktoś potrafi zmienić mój program?

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int kopiuj(char*, char *);
int main(int argc, char *argv[])
{
    char nazwa1[100];
    char nazwa2[100];
    cout<<"Podaj nazwe pliku do przepisania:";
    cin>>nazwa1;
    cout<<"Podaj nazwe pliku, do ktorego chcesz przepisac:";
    cin>>nazwa2;
    kopiuj(nazwa1, nazwa2);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
int kopiuj(char *nazwa1, char *nazwa2)
{
    char znak;
    ifstream plik1(nazwa1);
    ofstream plik2(nazwa2);

    do 
     {    
            plik1.get(znak);          
            if(!(znak>='A' && znak<='Z'))   
            plik2.put(znak);           
     } 
    while(!plik1.eof());
    plik1.close();
    plik2.close(); 
}
0
if(!(znak>='A' && znak<='Z'))   
            plik2.put(znak);
else
            plik2.put(0x20);
0

Co oznacza:

else
            plik2.put(0x20);

??

0

Spacje ;p patrz ASCII

0

Czyli w miejsce dużych liter program sam wstawia spację. DZIĘKI=]
A czy mógłbyś mi jeszcze pomóc z programem z przepisywaniem od tyłu?

0

Ale jak są puste linie to ten program wciąga literki do pierwszego wiersza :( Czy wiecie co zrobić, aby temu zapobiec i zostawić je tam gdzie są?

#include <cstdlib>
#include <iostream>
#include <fstream>


using namespace std;
int kopiuj(char *, char *);
int main(int argc, char *argv[])
{
    char nazwa1[100];
    char nazwa2[100];
    cout<<"Podaj nazwe pliku do przepisania"<<endl;
    cin>>nazwa1;
    cout<<"Podaj nazwe pliku, do ktorego chcesz przepisac"<<endl;
    cin>>nazwa2;
    kopiuj(nazwa1,nazwa2);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
int kopiuj(char *nazwa1, char *nazwa2)
{
    char c;
    ifstream plik1(nazwa1);
    ofstream plik2(nazwa2);

    do
    {
       plik1.get(c);
       if(c>='a' && c<='z')
       plik2.put(c);          
       else
       plik2.put(0x20);
                     
    }
    while(!plik1.eof());

    plik1.close();
    plik2.close();
  
    
}
0

Ma ktoś jakiś pomysł?

0
#include <cctype>
// ...
int kopiuj(const char *nazwa1, const char *nazwa2)
{
    char c;
    ifstream plik1(nazwa1);
    ofstream plik2(nazwa2);

    while (plik1.get(c))  plik2.put(islower(c) || iscntrl(c) ? c : ' ');
}
0

Hm, źle. Teraz spojrzałem na treść zadania w pierwszym poście, z którą znajdujący się pod nią kod nie ma nic wspólnego.

while (plik1.get(c)) plik2.put(isupper(c) ? ' ' : c);
0

Też nie idzie;/

#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include <cctype>


using namespace std; 

int kopiuj(char*, char *); 
int main(int argc, char *argv[]) 
{ 
    char nazwa1[100]; 
    char nazwa2[100]; 
    cout<<"Podaj nazwe pliku do przepisania:"; 
    cin>>nazwa1; 
    cout<<"Podaj nazwe pliku, do ktorego chcesz przepisac:"; 
    cin>>nazwa2; 
    kopiuj(nazwa1, nazwa2); 
    
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 
int kopiuj(char *nazwa1, char *nazwa2) 
{ 
    char c; 
    ifstream plik1(nazwa1); 
    ofstream plik2(nazwa2); 


while (plik1.get(c)) plik2.put(isupper(c) ? ' ' : c);
    plik1.close(); 
    plik2.close(); 
} 

Co jest nie tak?
0
c:/Documents and Settings/baiji $ cat dupa.cpp 
#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include <cctype>


using namespace std; 

int kopiuj(char*, char *); 
int main(int argc, char *argv[]) 
{ 
    char nazwa1[100]; 
    char nazwa2[100]; 
    cout<<"Podaj nazwe pliku do przepisania:"; 
    cin>>nazwa1; 
    cout<<"Podaj nazwe pliku, do ktorego chcesz przepisac:"; 
    cin>>nazwa2; 
    kopiuj(nazwa1, nazwa2); 
    
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 
int kopiuj(char *nazwa1, char *nazwa2) 
{ 
    char c; 
    ifstream plik1(nazwa1); 
    ofstream plik2(nazwa2); 

    while (plik1.get(c)) plik2.put(isupper(c) ? ' ' : c);
}
c:/Documents and Settings/baiji $ g++ dupa.cpp -o dupa.exe && ./dupa
Podaj nazwe pliku do przepisania:dupa.cpp
Podaj nazwe pliku, do ktorego chcesz przepisac:dupa.out
Aby kontynuować, naciśnij dowolny klawisz . . . 

c:/Documents and Settings/baiji $ cat dupa.out 
#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include <cctype>


using namespace std; 

int kopiuj(char*, char *); 
int main(int argc, char *argv[]) 
{ 
    char nazwa1[100]; 
    char nazwa2[100]; 
    cout<<" odaj nazwe pliku do przepisania:"; 
    cin>>nazwa1; 
    cout<<" odaj nazwe pliku, do ktorego chcesz przepisac:"; 
    cin>>nazwa2; 
    kopiuj(nazwa1, nazwa2); 
    
    system("     "); 
    return     _       ; 
} 
int kopiuj(char *nazwa1, char *nazwa2) 
{ 
    char c; 
    ifstream plik1(nazwa1); 
    ofstream plik2(nazwa2); 

    while (plik1.get(c)) plik2.put(isupper(c) ? ' ' : c);
}
c:/Documents and Settings/baiji $ 

Jak dla mnie działa zgodnie z oczekiwaniami. A teraz kilka uwag:

  • wczytuj nazwę pliku do stringa, metodą getline;
  • nie przekazuj nazwy jako char *;
  • funkcja kopiuj powinna być void, w końcu nie zwraca wyniku;

Jak nie tak to jak niby ma działać?

0

INFORMACJA:
Twoje wszystkie poprzednie watki wylecialy, poniewaz (test wielokrotnego wyboru)

  • sprawa byla banalna i natychmiast dostales odpowiedz, ktora moglbys sam znalezc na google w minute, jednak Ty nadal domagales sie prowadzenia za reke
  • temat nie mowil nic o problemie, lub mowil tak wiele jak mowienie "coś" zamiast "krowa chora na padaczke"

--ten post ulegnie samozniszczeniu po tym, jak go ponownie zobacze:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1