Aşağıdaki kodu çalışmıyor ki:dize :: -1 değeri dönen bulmak 0 [C++]
string line;
string line_sub;
size_t open_tag_start;
const string open_tag = "<image>";
const int open_len = open_tag.length() + 1;
open_tag_start = line.find(open_tag);
line_sub = line.substr(open_tag_start, open_len);
Bu kodu çalıştırmayı denediğinizde Ben line.find
hat değişken open_tag_start
için -1
değeri döndürmesi nedeniyle bu hata oluştuğunu anladım
terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr Aborted (core dumped)
: aşağıdaki hatayı alıyorum. 0
değerini open_tag_start
değişkenine kodlayarak sorunu düzeltebilirim, ancak bu satırın herhangi bir noktasında etiketi bulabilen genel bir algoritmaya ihtiyacım var, bu yüzden bir değişken olmalı. Burada yanlış yaptığımı kimse görebilir mi?
İşte daha fazla bilgi. Bu kod ile
Amacım aslında bir dize içeriyor mu, hangi string line
bir string line_sub
ayıklamak ve ben size_t open_tag_start = 0
ayarladığınızda, ben derlemek ve kod yürütmek ve beklenen çıkışı gözlemlemek mümkün duyuyorum eğer. line
boş değil ve sorunum ben
line_sub = line.substr(0, open_len);
ile
line_sub = line.substr(open_tag_start, open_len);
değiştirdiğinizde benim sorun çözülüyor ve ben derlemek ve kod yürütebilir olmasıdır.
Bu, programın yalnızca sorunlara neden olan parçaları içeren kısa bir sürümüdür. Bu kodun derlenmeye çalışılması, yukarıda ayrıntılandırılan hata mesajını verecektir. Kodun bir kısmı dışarı bıraktım sürece dosya rss.xml
ders find
başarısız öylesine line
, boş bir dize, engadget.com http://www.engadget.com/rss.xml
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <cstring>
using namespace std;
void get_tag_contents(ifstream& rssfile, string line, string open_tag);
int main()
{
const string open_tag = "<image>";
ifstream rssfile;
rssfile.open("rss.xml");
string line;
getline(rssfile, line, '\n');
get_tag_contents(rssfile, line, open_tag);
return 0;
}
void get_tag_contents(ifstream& rssfile, string line, string open_tag)
{
const int open_len = open_tag.length() + 1;
size_t open_tag_start;
string line_sub;
open_tag_start = line.find(open_tag);
line_sub = line.substr(open_tag_start, open_len);
}
Lütfen sorunu derleyen ve gösteren kısa, kendi kendine yeten bir program gönderin. Kaydettiğiniz herhangi bir kodda eksik olduğumuz önemli bir ayrıntı var. –
Soruyu koduyla güncelledim. –