簡體   English   中英

這個反向字符串代碼正確嗎?

[英]Is this reverse string code correct?

當我在IDE上運行該代碼時,此代碼對我有用,但在進行此練習的網站上卻不起作用。 我遇到了細分錯誤。 那么這段代碼正確嗎? 我做錯了嗎?

#include <iostream>
#include <string>
using namespace std;

string FirstReverse(string str) { 
  for (int i = 0, back = str.size()-1; i != back; ++i, --back)
  {
    char c = str[back];
    str[back] = str[i];
    str[i] = c;
  }
  return str; 
}

int main() {
  cout << FirstReverse("hello");
  return 0;
}

另外,最好的方法是什么?

您的索引只需要達到長度的一半,這樣我們就可以確保一對之間的交換僅發生一次:

for (int i = 0; i < str.size() / 2 ; i ++)
{
    char c = str[str.size() - 1 - i];
    str[str.size() - 1 - i] = str[i];
    str[i] = c;

}

如果將循環條件更改為“ i <= back”,則不會導致分段錯誤。 這是因為當size-1為偶數時,i&back將永遠不會相等。 因此,循環將繼續進行而不會中斷&嘗試訪問字符串外部的字符串成員。

只需將您的條件從!=更改為<=解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM