2017-08-04 7 views
-4

私は入力を確認するコードを書いた、私はHavePunctフラグは常にfalseを設定しました。しかし、私がhello,world!!を入力すると、それは私に間違った結果を返します。あなたは私のコードに問題を参照してください場合は私に知らせてください:私はいつも私のコードで "false"を取得する

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

int main() { 
    string s,result_s; 
    char ch; 
    bool HavePunct = false; 
    int sLen = s.size(); 

    cout << "Enter a string:" << endl; 
    getline(cin, s); 
     //检测字符串是否有符号 
    for (string::size_type i = 0;i != sLen; ++i) { 
     ch = s[i]; 
     if (ispunct(ch)) { 
      HavePunct = true; 
     } 
     else 
      result_s += ch; 
    } 
    if (HavePunct) { 
     cout << "Result:" << result_s; 
    } 
    else { 
     cerr << "No punction in enter string!" << endl; 
     system("pause"); 
     return -1; 
    } 
    system("pause"); 
    return 0; 
} 
+4

あなたはステッピングみました、彼はまだデバッガと思いましたか? –

+3

'sLen'をどこで設定しますか。文字列はまだ入力されていますか? – NathanOliver

答えて

2

あなたが任意の入力を入力する前に、ラインの長さを計算しています。したがって、sLenは常にゼロです。その行を、入力を読み込んだ行の後ろに移動します。

cout << "Enter a string:" << endl; 
getline(cin, s); 
int sLen = s.size(); 
+0

あなたの助けを感謝します。前にこの問題を認識していません。 –

+0

@ y.ferocious、あなたは大歓迎です。 –

2

私は確認することはできません、しかし、それは思われるので、あなたのイテレータのため、効果的にあなたの上限0を作り、あなたを引き起こして、あなたは文字列を受け取る前にs.size()になるように割り当てる変数sLen、によって決定される上限forループは決して実行されません。

これを試してみて、私に知らせてください:

getline(cin, s); 
int sLen = s.size(); 
for (string::size_type i = 0;i != sLen; ++i) { 
ch = s[i]; 
if (ispunct(ch)) { 
    HavePunct = true; 
    } 
else 
    result_s += ch; 
} 
関連する問題