2016-11-18 11 views
-4
#include<iostream.h> 
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
void main() 
{ 
clrscr(); 
char name[10]; 
char op; 
int w, len; 
cout<<"Menu\n1.Length of the string(with & without spaces)\n" \\I have edited out the rest as it was irrelevant to my question 
cin>>op; 
switch(op) 
{ 
case '1': cout<<"Enter a word"; 
      gets(name); 
      w=strlen(name); 
      cout<<"The length of the string including spaces is"<<w; 
      for(int i=0;i!=w;++i) 
      { 
      if (name[i]!=' ') 
      { 
      len++; 
      } 
      } 
    cout<<"Excluding spaces is\n"<<len; 
} 
getch(); 
} 

私はこのプログラムにTurbo C7コンパイラを使用しています。 空白を含めて表示しますが、空白を除外しません。 コードが間違っている場合は、修正してください。文字列の長さを検索します(空白は含みません)?

+2

示されたコードには複数のバグがあります。 'gets()'を使わないでください。これは、 'std :: cin'について全く何も知らないCライブラリ関数です。これは未定義の動作です。 [後ろの空白を無視する正しい方法についてあなたのラバーダックに話す](https://en.wikipedia.org/wiki/Rubber_duck_debugging)。 –

+0

コンパイラは 'std :: string'をサポートしていますか? – danielunderwood

+0

私は確信していません。私はそれを一度も使ったことがありません。 –

答えて

-1

使用String.length()Stringタイプにあなたの入力を変更します。 #include <string>を忘れないでください。

int len = 0; 

string Input; 
getline(cin, Input); 

for (int x = 0; x < Input.length(); x++) { 
    if (Input[x] != ' ') { 
     len++; 
    } 
} 

cout << len; 

これは問題なく動作します。

+0

OPの質問は、自分のコードのどこにエラーがあるのか​​を知り、解決策を書き直さないことでした。プログラムは 'char'の配列で動作するはずです。クラス 'string'を使う必要はありません – AhmadWabbi

+0

はい、私はcharを使うのは悪い考えだと言いました – user7777777

+0

なぜそれは悪い考えですか? – AhmadWabbi

-1

あなたはlenを初期化するのを忘れ:

int w, len=0; 
+0

len = 0にコードを編集しました。スペースを含むのと同じ値を表示します。 –

+0

'len'は自動的に0に初期化されますが、コンパイラに依存する可能性があります。 – danielunderwood

+0

@ danielu13ターボではないC7 – AhmadWabbi

関連する問題