2017-07-05 62 views
-5

所以我有這樣的代碼爲C++(不是C++ 11)C++使用for循環,當你不知道什麼時候迭代將結束

#include <iostream> 


using namespace std; 

int calcTrip (string s) { 
    int ans = 1; 
    for (int i = 0; i < sizeof(s); i++) { 
     char c = s[i]; 
     ans = ((ans*(c - 'A' + 1))); 
    } 
    return ans; 

} 
int main() { 

    string a1, a2; 
    cin >> a1 >> a2; 
    cout << calcTrip(a1) << endl; 
    if (calcTrip(a1) != calcTrip(a2)) { 
     cout << "STAY" << endl; 
    } 
    else { 
     cout << "GO" << endl; 
    } 

} 

對於我對在calctrip變量i循環,如果我做i<sizeof(s)我得到的i小於32,因爲一個字符串的大小爲32.由於字符串s是一個用戶輸入,我如何使i小於用戶輸入字符數s。

PS我知道如何在C++ 11做到這一點,但對於類,我需要知道如何做到這一點在C++ 98

+7

'sizeof(s)'不是字符長度's'。你確定你知道你在做什麼嗎? – StoryTeller

+2

- >你應該使用's.size()'來代替。 – songyuanyao

+0

除非我需要從問題標題中瀏覽它,否則在這裏沒有看到具體問題?似乎你錯過了你的問題的一部分。 –

回答

1

sizeof操作符返回的數據類型的sizeof不variable.Using的sizeof(S)將返回字符串,而不是A1的尺寸大小......那麼可以使用,

a1.size() or a1.length()

到獲取字符串變量的長度。

4

要遍歷一個std::string(或通過任何Standard Containers)用C++ 98,可以使用迭代器太:

for(std::string::iterator it = s.begin(); it != s.end(); ++it) { 
    char c = *it; 
    ans = ((ans * (c - 'A' + 1))); 
} 

range-based for loop是C++ 11的特性,但迭代器都沒有。另一種選擇是如下使用簡單的for循環:

for(int i = 0; i < s.size(); i++) { 
    char c = s[i]; 
    ans = ((ans * (c - 'A' + 1))); 
} 

std::string::size返回在std::string的字符數。

相關問題