我想組合txt檔案中每行的前4個字符并將其與我擁有的關鍵字進行比較,但是當我組合這些字符時,我得到了這4個字符的ascii數字的總和(無論如何)。我怎么解決這個問題。我的代碼在這里:當我除錯時,我看到字串 search(variable) 是 321。
int main() {
ifstream file("sentence.txt");
if (file.is_open()) {
string line;
while (getline(file, line)) {
string search = to_string(line[0] line[1] line[2]); // you see what I mean
if ("dog" == search) {
cout << "there is dog";
}
else {
cout << "there is no dog"<<endl;
}
}
}
}
uj5u.com熱心網友回復:
該函式std::to_string()旨在將數字轉換為字串表示形式。這不是你需要的。
無需創建新字串search來檢查字串是否以 stringline開頭"dog"。
創建新字串search效率低下。
相反,您可以撰寫例如
if ( line.compare( 0, 3, "dog" ) == 0 ) {
cout << "there is dog";
}
else {
cout << "there is no dog" << endl;
}
或者,如果你的編譯器支持 C 20,你也可以這樣寫:
if ( line.starts_with( "dog" ) ) {
cout << "there is dog";
}
else {
cout << "there is no dog" << endl;
}
uj5u.com熱心網友回復:
line[0], line[1], 和line[2]是chars,不是std::strings。 char是整數型別,因此將兩個chars 相加會得到一個整數,即兩個運算元之和。它不會產生一個std::string是兩個chars 的串聯的 a。
要獲取 a 的子字串,std::string請使用substr成員函式:
std::string search = line.substr(0, 3);
或者,如果您確實需要std::string從單個chars 構造 a,請使用接受 a 的建構式std::initializer_list<char>:
std::string search{line[0], line[1], line[2]};
uj5u.com熱心網友回復:
line可以通過 獲得由 的第一個字符組成的字串std::substr。在這種情況下,我實際上更喜歡帶有兩個迭代器的建構式:
std::string first3chars{line.begin(),line.begin() 3};
注意line少于 3 個字符的 s。
您的代碼添加了三個chars 的值。添加chars via 不會連接它們,如果它會呼叫std::to_string結果?char是一個整數型別,您看到的 321 是在 中添加前 3 個字符的數字表示的結果line。
uj5u.com熱心網友回復:
有沒有辦法讓您再次將這些字符(由于某種原因似乎是整數型別)轉換為 char 型別。如果“to_string”將這三個輸入連接成一個,也許這應該解決問題;另外,智能感知應該做解釋引數使用和回傳值的技巧。
uj5u.com熱心網友回復:
這段代碼的問題在于,當您訪問字串的元素時,您會得到一個 ASCII 數字字符,當您嘗試將兩個字符相加時,您正在添加它們的 ASCII 代碼。
在您的特定情況下,由于您需要連續字符,最好的解決方案可能是使用字串的substr函式(檔案)。否則,您可能需要將其中一個字符轉換為字串,然后將其他字符“添加”到其中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/482624.html
上一篇:如果結果是浮點數,如何停止除法?
