2016-11-23 6 views
-4

このコードは、それらの戻り値が呼び出されたときに1または0の値を返しますが、デフォルトの戻り値2になると戻りません。私はそれが私が行方不明の小さなものだと確信していますが、私はそれを把握することはできません。関数がデフォルト値を返さないC++

int comp(string a, string b){ 
    char x; 
    char y; 
    int i = 1; 
    int len; 
    len = a.length(); 
    if(b.length() < (unsigned)len){ 
     len = b.length(); 
    } 
    len++; 
    while(i!=len){ 
     x = a.at(i); 
     y = b.at(i); 
     if(getNum(x) < getNum(y)){ 
      return 1; 
     } 
     else if (getNum(x) > getNum(y)){ 
      return 0; 
     } 
     i++; 
    } 
    return 2; 
} 
+0

'len'変数は' size_t'または 'unsigned int'として宣言する必要があります。負の長さの文字列に遭遇したことはありません。 –

+1

この機能が何であっても、間違っています。インデックスは1ではなく0から始まります。 –

+1

あなたの投稿を 'getNum'の*定義*で編集してください。 –

答えて

1

ソリューション:

i=0; 

は、whileループ

len++; 

は、あなたが実際にそこに例外を得ているの上にコードの下に削除します。最後に実行すると、indexoutofbound例外が発生しているためです。

文字列が「こんにちは」の場合、長さは5です。つまり、インデックスは0,1,2,3,4です。あなたのlenで

h e l l o 
0 1 2 3 4 

++それは(5 < 6)あなたは

はそれが

を役に立てば幸い存在していない5のインデックスにアクセスするためにトリングている6に長さを上げながらの最後のラウンドに
+0

Omgありがとうございます。私はそれが何かばかげたことを知っていた。 – Upgrayded