16

文字列charをcharごとに繰り返し処理しようとします。私はこのようなことを試みました:

void print(const string& infix)
{
char &exp = infix.c_str();
while(&exp!='\0')
{
         cout<< &exp++ << endl;
    }
}

したがって、この関数はprint( "hello");を呼び出します。戻る必要があります:

h
e
l
l
o

コードを使用してみましたが、まったく機能しません。ところで、パラメータはポインタではなく参照です。ありがとうございました

4

4 に答える 4

28

コードには参照ではなくポインタが必要ですが、C++11 コンパイラを使用している場合、必要なのは次のとおりです。

void print(const std::string& infix)
{
    for(auto c : infix)
        std::cout << c << std::endl;
}
于 2013-02-03T01:19:37.070 に答える
15
for(unsigned int i = 0; i<infix.length(); i++) {
    char c = infix[i]; //this is your character
}

それが私がやった方法です。それが「慣用的」すぎるかどうかはわかりません。

于 2013-02-03T00:53:35.610 に答える
6

を使用している場合std::string、これを行う理由はありません。イテレータを使用できます:

for (auto i = inflix.begin(); i != inflix.end(); ++i) std::cout << *i << '\n';

元のコードについては、char*代わりに使用charする必要があり、参照は必要ありませんでした。

于 2013-02-03T00:54:45.040 に答える
0

std::string::c_str()は を返します。それを保持するためにconst char*使用することはできません。char&また、exp は既にポインターであるため、参照は必要ありません。

ただし、イテレータを使用することをお勧めします。

void print(const string& infix)
{
  for (auto c = infix.begin(); c!=infix.end(); ++c)
  {
    std::cout << *c << "\n";
  }
  std::cout << std::endl;
}

元のコードを修正するには、次を試してください。

void print(const string& infix)
{
  const char *exp = infix.c_str();
  while(*exp!='\0')
  {
    cout << *exp << endl;
    exp++;
   }
 }
于 2013-02-03T00:54:17.533 に答える