我決定開始學習C++我採取正式上課之前就可以了明年,我已經開始與一些對CodeEval和項目歐拉容易挑戰。在這個文件中,你必須輸入一個包含字符串的輸入文件,並且你必須輸出文件的一行和反轉的文字。使得與以下輸入一個文件CodeEval挑戰:反向字符串輸入文件
1:這是一條線
2:這是線上的兩個
最終將作爲
1:一條線是這
2:兩個線路是這
我寫了下面的程序做到這一點,並且除了無法正常倒車字符串,而不是完全扭轉這個詞,它那儘管編譯時沒有錯誤或警告,但仍存在錯誤。我假設我錯過了關於C++中正確的內存管理的事情,但我不確定它是什麼。那麼有人能夠啓發我關於內存管理方面的想法嗎?
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
int main(int argc, char** argv)
{
std::string filename = argv[1]; //has to be argv[1], argv[0] is program name
std::string output_string; //final output
std::string line; //Current line of file
std::ifstream read(filename.c_str());
if(read.is_open()){
while(std::getline(read,line)){
std::string temp;
std::istringstream iss;
iss.str(line);
while(iss >> temp){ //iterates over every word
output_string.insert(0,temp); //insert at the start to reverse
output_string.insert(0," "); //insert spaces between new words
}
output_string.erase(0,1); //Removes the space at the beginning
output_string.insert(0,"\n"); //Next line
}
output_string.erase(0,1); //Remove final unnecessary \n character
read.close();
}
else{
std::cout<<"Unable to open file\n";
}
for(unsigned int i = output_string.length(); i>=0;i--){
std::cout<<output_string[i];
}
std::cout<<"\n";
}
嘿,謝謝你的幫助。在另一個說明中,我一直在使用-Werror進行編譯,但是您會推薦作爲使用-Wextra和-Wall進行編譯的標準嗎? – NathanielJPerkins
@Thallazar越警示越好。 '-Wextra'增加了一些'-Wall'不包括的警告。 「錯誤」將通常只是「警告」的東西轉換爲實際停止編譯的錯誤,這可能很適合在學習時使用。也許'-Wall -Wextra -Werror'可能是個好主意。 – notmyfriend