2016-04-03 12 views
-3

宿題の割り当て私は、すべての単語をスペースで区切り、単語を区切ってフォーマットした文字列を受け取るプログラムを作成することになっています。C++の文字列検索プログラムに問題がある

多少説明するのは難しいですが、「StopAndSmellTheRoses」という文字列を「停止してバラの香り」に変換して、この文の最初の文字のみ大文字にする必要があることに注意してください。

ASCIIコードテーブルを使用して文字列で大文字を検索する機能を作成し、その文字列が見つかるとその大文字の前にある文字を新しい文字列に追加します。私はネストされたループを使ってこれを試していますが、 "DEBUG ASSERTION FAILED!"エラーメッセージが表示されます。

これは私がこれまでに書いたこのプログラムの始まりに過ぎず、私のアイデアがコードに正しく翻訳されていないような気がします(私は基本的に、これらのアイデアを実際のコード)。

これまでのところ、私が持っている:

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

void strConvert(string); 

int main() 
{ 
    string myStr = "StopAndSmellTheRoses"; 

    strConvert(myStr); 

    system("pause"); 
    return 0; 
} 

void strConvert(string myStr) 
{ 
    string newStr; 
    for (int i = 1; i <= sizeof(myStr); i++) 
    { 
     if (myStr[i] > 'A' && myStr[i] < 'Z') 
     { 
      for (int j = 1; j < i; j++) 
      { 
       newStr += myStr[j]; 
      } 
      tolower(myStr[i]); 
      newStr += '\n'; 
     } 
    } 
    cout << newStr; 
} 

私はNewStrによってすでににmyStrの手紙「を追加する」の私の方法でも動作するかどうか本当にわからないんだけど、それは私がで遊んでてきたものです。誰も私の機能を実行する方法を理解するのを助けてくれませんか?私はおそらく大量のエラーがあることを理解しています、私はC++に新しいです。

ありがとうございました!

+0

'ボイドstrConvert(ストリングmyStr) ' - なぜ基準としてそれを通過しませんか? –

答えて

1

あなたのインデックスが範囲外になる:

for (int i = 1; i <= sizeof(myStr); i++) 

0からsize -1に行くC++で

for (int i = 0; i < myStr.size(); i++) 

インデックスをする必要があります。

sizeof(myStr)は、データ型のサイズを示します。これは、std::string()の値のサイズと同じではありません。


Here's the completely fixed sample

void strConvert(std::string& myStr) 
{ 
    std::string newStr; 
    for (size_t i = 0; i < myStr.size(); i++) 
    { 
     if (i > 0 && myStr[i] >= 'A' && myStr[i] <= 'Z') 
     { 
      newStr += ' '; 
     } 
     newStr += std::tolower(myStr[i]); 
    } 
    myStr = newStr; 
} 
+0

応答のおかげで、私はコードのその部分を修正しました。コードは今コンパイルされ出力されます:topAnd、topAndSmell、topAndSmellThe(すべて異なる行にあります) – sundowned

+0

@DerekVaughan完全な修正を確認してください。 –

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

string strConvert(const string &s) 
{ 
    string newStr; 
    if(!s.empty()) 
    { 
     string::const_iterator it=s.cbegin(); 
     newStr.push_back(*it); 
     while(++it!=s.cend()) 
     { 
      if(*it>='A' && *it<='Z') newStr.push_back(' '); 
      newStr.push_back(tolower(*it)); 
     } 
    } 
    return newStr; 
} 

int main() 
{ 
    string myStr = "StopAndSmellTheRoses"; 
    cout << strConvert(myStr) << endl; 
    return 0; 
} 
+0

説明なしのプレーンコードはあまり良い答えではありません。 –

+0

私は知っているが、私の英語はあまり良くない。 – Lassie

+1

さて、Google翻訳は今日はかなり良いです... –

関連する問題