2017-11-02 11 views
0

以下のコードは機能しません。入力をabcaadと入力すると、ファイルが動作を停止したことを示しています.Windowsは解決策を確認しています。文字ポインタの宣言の後にint i=0を含めると、それは機能しています。誰かが理由を特定したり、助けてくれますか?ポインタを使用して同じ連続する文字の最長シーケンスの長さを見つける

文字列を入力するようにユーザを促し、 データメンバとメンバ関数へのポインタを使用して文字列内の同一の連続した文字 の最長シーケンスの長さを返すプログラムを開発します。 たとえば、 "aaaAAAAAjjB"という文字列では、同じ連続する文字のうち、最も長いシーケンスは です。 "AAAAA"です。

#include <iostream> 
#include <fstream> 

using namespace std; 

fstream ob("js.txt"); 

int Search(char *ch) 
{ 
    int count1=0,count2=0; 
    for(int i=0;ch[i]!='\0';i++) 
    { 
    int j=0; 
    while(ch[j]!='\0') 
    { 
     if(ch[i]==ch[j]) 
      count1++; 
     j++; 
    } 
    if(count2<count1) 
    { 
     count2=count1; 
    } 
    count1=0; 
    } 
    return count2; 
} 

int main() 
{ 
    char *c; 
    cout<<"Enter a string: "; 
    cin>>c; 
    cout<<"Longest no. of identical consecutive characters: "<<Search(c)<<endl; 
} 
+1

「機能しない」とはどういう意味ですか?それはあなたのハードドライブをフォーマットしましたか、それともあなたの家を燃やしましたか? –

+0

私は希望の出力を得ていないという意味です。 – justrockzz

+6

'char * c;' => 'char c [100];'。しかし、C++では 'std :: string'を使うべきです。 –

答えて

0

あなたSearch機能を使用すると、その後

int Search(const char *ch) 

にリファクタリングができるが、あなたも引き起こしているメモリのバグを修正した(std::stringcからタイプを変更することができ、私にはOKに見えますクラッシュ)。呼び出しサイトは、その後std::stringからデータバッファを抽出c_str()

int main() 
{ 
    std::string c; 
    cout<<"Enter a string: "; 
    cin>>c; // Yup, the appropriate overload is implemented. Ain't C++ great? 
    cout<<"Longest no. of identical consecutive characters: "<<Search(c.c_str())<<endl; 
} 

なります。 const char*ポインタ。

+0

あまりにも@Bathshebaに感謝します。 – justrockzz

+0

Pleasure。 '' std :: string''に '' ''を付けることができることは、Cから移動するときに発見する最もかわいいものの1つです。 Cの標準ライブラリI/O関数は非常に不完全で、あなた自身で書くことになります。 – Bathsheba

関連する問題