[英]c++ string manipulation reversal
我目前正在使用c ++,正在研究如何通過字符串接受一個句子並反轉單詞(這是一個單詞……單詞a是This等等)
我看過這種方法:
static string reverseWords(string const& instr)
{
istringstream iss(instr);
string outstr;
string word;
iss >> outstr;
while (iss >> word)
{
outstr = word + ' ' + outstr;
}
return outstr;
}
int main()
{
string s;
cout << "Enter sentence: ";
getline(cin, s);
string sret = reverseWords(s);
cout << reverseWords(s) << endl;
return 0;
}
我已經通過了功能和某種程度的了解,但是對於確切發生的事情我有些困惑
iss >> outstr;
while (iss >> word)
{
outstr = word + ' ' + outstr;
}
return outstr;
有人可以向我解釋使單詞被顛倒的確切過程嗎?
非常感謝你
iss是一個istringstream,而istringstreams是istream。
作為istream,iss具有operator>>
,該operator>>
符以空格分隔的方式從其字符串緩沖區讀取字符串。 也就是說,它一次讀取一個空格分隔的令牌。
因此,給定字符串“ This is a word”,它將首先讀取的是“ This”。 接下來要讀的是“是”,然后是“ a”,然后是“單詞”。 然后它將失敗。 如果失敗,則將iss置於一種狀態,如果將其作為布爾值進行測試,則其評估為false。
因此,while循環將一次讀取一個單詞。 如果讀取成功,則循環主體會將單詞附加到outstr的開頭。 如果失敗,則循環結束。
iss是一個流 , >>是提取運算符 。 如果將流視為連續的數據行,則提取運算符將從該流中刪除一些數據。
while循環不斷從流中提取單詞,直到它為空(或者只要流可以說的很好就行)。 循環的內部用於將新提取的單詞添加到outstr的末尾
查找有關c ++流的信息以了解更多信息。
說明:
istringstream iss(instr);
允許在使用operator>>
時對instr
進行解析,並在空格字符之間分隔單詞。 每次使用運算符>>
,都會使iss
指向instr
存儲的短語的下一個單詞。
iss >> outstr; // gets the very first word of the phrase
while (iss >> word) // loop to get the rest of the words, one by one
{
outstr = word + ' ' + outstr; // and store the most recent word before the previous one, therefore reversing the string!
}
return outstr;
因此,短語中檢索到的第一個單詞實際上存儲在輸出字符串的最后一個位置。 然后將從原始字符串讀取的所有后續單詞都放在讀取的前一個單詞之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.