2016-11-27 9 views
0

Хотя тема вопроса не совсем точна, вот в чем проблема. У меня есть файл, в котором человек пишет свой текст, например «Сегодня очень хороший день», и я храню его в документе txt. Тогда моя задача - взять все эти символы и переместить их на одну букву далее (a становится b, z становится a и т. Д.). Но мне нужно держать места на своих местах.Как добавить пространство в массив

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

int main(){ 

string a; 
string Code; 
string New; 

ifstream File ("Txt.txt"); 
File>>Code; 

for (int i = 0; i<Code.size(); i++){ 
    if (Code.at(i) >= 'A' && Code.at(i) <= 'V' || Code.at(i) >= 'a' && Code.at(i) <= 'v') { 
      a = Code.at(i) + 4; 
      New += a; 
      } 
    else if (Code.at(i) == 'W'){ 
      a = 'A'; 
      New += a;} 
    else if (Code.at(i) == 'X'){ 
      a = 'B'; 
      New += a;} 
    else if (Code.at(i) == 'Y'){ 
      a = 'C'; 
      New += a;} 
    else if (Code.at(i) == 'Z'){ 
      a = 'D'; 
      New += a;} 
    else if (Code.at(i) == 'w'){ 
      a = 'a'; 
      New += a;} 
    else if (Code.at(i) == 'x'){ 
      a = 'b'; 
      New += a;} 
    else if (Code.at(i) == 'y'){ 
      a = 'c'; 
      New += a;} 
    else if (Code.at(i) == 'z'){ 
      a = 'd'; 
      New += a;} 
    else if (Code.at(i) == ' '){ 
      a = Code.at(i); 
      New += a; 
      } 
     }cout<<New; 

return 0; 
} 

Но программа только читает первое слово. Как мне изменить программу для чтения всего текста со всеми пробелами?

+2

Вам не нужны все те 'if' заявления, если вы поняли, что следующее письмо по модулю 26. Например, если буква«г», так как«г это 26-буква, (26 + 1) mod 26 = 1, а 'a' - первый символ. – PaulMcKenzie

+0

Я думаю, что это отвечает на ваш вопрос: http://stackoverflow.com/questions/37449872/how-to-read-in-multiple-words-from-a-text-file –

ответ

1

Использование std::getline, как это:

std::string line; 
std::ifstream file("file.txt"); 
std::getline(file, line); //loads one line 

using namespace std; Btw это плохая практика, вы должны держать свое глобальное пространство имен в чистоте и использовать std:: префикс. Если вы действительно ленивы, вы можете «импортировать» только важные части. using std::cin; и т.д.

+0

Он просто читает одну строку, тогда вам нужно используйте 'std :: cout << строка << std :: endl'. Кроме того, если вы хотите загрузить все линии, используйте цикл: ' –

+0

Это работает отлично! Большое спасибо! – Adversas

0

Адрес в конце вашего файла.

void openFile (ifstream& f) 
    { 
    const  long LINE_LEN = 23; 
    int pos; 
     // position to 256 lines before end of file 

f.open("demodoutcarr.txt"); 
f.seekg(0, ios::end); 
pos = f.tellg(); 
pos -= LINE_LEN * NBR_RECORDS; 
f.seekg(pos); 
    } 
+0

NBR_RECORDS не объявлен, и потому что я не понимаю код так же хорошо, как и вы, я не знаю, как его изменить. Вы можете помочь? – Adversas

+0

Попробуйте открыть свой файл, как этот, ifstream File («Текст», ios :: in | ios :: ate); //в конце –