2016-04-03 31 views
1

metin dosyası yerine fstream adresini gösterir Kullanıcı bir dosyayı "aramak veya dönüştürmek" isteyip istemediklerini soran bir program yazmak üzereyim, convert seçtikleri takdirde, dosya.Güncelleme: program

Programın neden dosyayı açmak yerine dosyanın adresini gösterdiğini bilmiyorum. öncelikle == kullanarak c-dizeleri karşılaştırmak olamaz anda

#include <fstream> 
#include <fstream> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 

char dateiname[64], kommando[64]; 

    ifstream iStream; 


    cout << "Choose an action: " << endl << 
      " s - search " << endl << 
      " c - convert" << endl << 
      " * - end program" << endl; 
    cin.getline(kommando,64,'\n'); 
    switch(kommando[0]) 
    { 
     case 'c': 
      cout << "Enter a text file: " << endl; 
      cin.getline(dateiname,64,'\n'); 
      iStream.open("C://users//silita//desktop//schwarz.txt"); 
     case 's': break; 
     case '*': return 0; 
     default: 
      cout << "Invalid command: " << kommando << endl; 
    } 
    if (!iStream) 
    { 
     cout << "The file " << dateiname << " does not exist." << endl; 
    } 
    string s; 
    while (getline(iStream, s)) { 
     while(s.find("TIT", 0) < s.length()) 
      s.replace(s.find("TIT", 0), s.length() - s.find("TIT", 3),"*245$a"); 
     cout << iStream << endl; 
    }  
    iStream.close(); 
} 
+1

İngilizce olarak, dizeleri ne anlama geldiğini bilmek yararlı olacaktır: diziler, benzer etkiler compare() yöntemini kullanırsınız. Yorum ekleyebilir misiniz? – Laurel

+0

dizgisi "" TIT "(kullanıcının girdiği metin dosyasında bulunan bir kategoriyi temsil eden)" 500 $ a "işaretiyle değiştirmeyi amaçlamaktadır, bu nedenle bu program bir metin dosyasındaki belirli şarkıların yerini almak için hazırlanmıştır – silisun

+0

En belirgin olan kısmı açıkladı. Sanırım, belirtmeliydim, Almanca (?) Kelimelerini 'cout' dizgesinde çevirmeniz gerekiyordu. Bazen insanlar tahmin edebilir ("Konvertieren" gibi "dönüştürmek" gibi geliyor), ama bu bazı insanlar için zor olabilir. "Nicht gefunden" gibi bazı ifadelerin tahmin edilmesi imkansız. – Laurel

cevap

0

if (i == "Konvertieren") haline gelmelidir; sadece et için, ancak, ben neden açıklayacağım. Burada, eğer

char MyCharArr[] = "My Character Array" 
// MyCharArr is now a pointer to MyCharArr[0], 
// meaning it's a memory address, which will vary per run 
// but we'll assume to be 0x00325dafa 
if(MyCharArr == "My Character Array") { 
    cout << "This will never be run" << endl; 
} 

değişmez bir karakter dizisi, yani bir tam sayı, bir bellek adresi bir işaretçi (MyCharArr) karşılaştırır. Açıkçası 0x00325dafa! = "Karakterim Dizisi".

kullanma cstrings (karakter dizileri), aslında farkı ile bir sayısal değer veren dizeleri "ne kadar farklı" olduğunu anlatan bir numara verecektir size cstring kütüphanede bulabilirsiniz strcmp() fonksiyonunu kullanmak gerekir . Bu durumda biz 0'dır hiçbir fark, sadece ilgilenen, yani ne ihtiyacımız şudur:

#include <cstring> 
using namespace std; 
char MyCharArr[] = "My Character Array" 
if(strcmp(MyCharArr,"My Character Array")==0) { 
    // If there is 0 difference between the two strings... 
    cout << "This will now be run!" << endl; 
} 

biz karakter yerine ++ dizeleri c kullanarak olsaydı siz, söz konusu Bunu yaparken olmasa da

#include <string> 
using namespace std; 
string MyString = "My C++ String" 
if(MyString.compare("My C++ String")==0) { 
    // If there is 0 difference between the two strings... 
    cout << "This will now be run!" << endl; 
} 
+0

çok teşekkür ederim !! Çok yararlı – silisun

+0

Bir sonraki sorun programımın, programın kullanıcı tarafından metin dosyasının adresini girmesini istedikten hemen sonra bitmesidir. Orada benim suçumun ne olduğunu biliyor musun? teşekkür ederim – silisun

2

:

İşte benim ilk yaklaşımdır. strcmp(const char*, const char*) kullanmalısınız. orada bulabilirsiniz bu konuda diğer bilgiler: Örneğin http://www.cplusplus.com/reference/cstring/strcmp/ : Lassie en cevapta belirtildiği gibi, ++ c veya c kullanarak bu şekilde dizeleri karşılaştırmak olamaz if(!strcmp(i,"Konvertieren"))