1

文字列を処理するためにchar配列をすでに使用しているプログラムに新しい(fstream)関数を追加したいと思います。問題は、以下のコードが文字列を生成することです。これを機能させるために考えることができる唯一の方法は、文字列をcharごとに新しいchar配列にコピーし、これらをに渡す中間関数を使用することです。プログラム内の関数を使用して結果を取得し、結果を文字ごとに文字列にコピーします。

確かに(うまくいけば)もっと良い方法があるはずですか?

ありがとう!

void translateStream(ifstream &input, ostream& cout) {   
  string inputStr;
  string translated;

  getline(input, inputStr, ' ');

  while (!input.eof()) {
    translateWord(inputStr, translated);
    cout << translated;
    getline(input, inputStr, ' ');
  }

    cout << inputStr;

translateWord func:

void translateWord(char orig[], char pig[]) {
  bool dropCap = false;
  int len = strlen(orig)-1;
  int firstVowel = findFirstVowel(orig);
  char tempStr[len];

  strcpy(pig, orig);


  if (isdigit(orig[0])) return;


  //remember if dropped cap
  if (isupper(orig[0])) dropCap = true;        

  if (firstVowel == -1) {
    strcat(pig, "ay");
    //    return;
  }

  if (isVowel(orig[0], 0, len)) {
    strcat(pig, "way");
    //    return;
  } else {

    splitString(pig,tempStr,firstVowel);

    strcat(tempStr, pig);
    strcat(tempStr, "ay");

    strcpy(pig,tempStr);
  }


  if (dropCap) {
    pig[0] = toupper(pig[0]);
  }

}
4

2 に答える 2

2

最初のパラメーターをaにすると、translateWordの最初のパラメーターとして文字列を渡すことができますconst char *inputStr.c_str()次に、最初のパラメーターとして関数を呼び出します。ただし、2番目の(出力)パラメーターを処理する必要があります。std:: string(最適なソリューション、IMHO)を使用するようにtranslateWordを完全に書き直すか、2番目のパラメーターとして適切なサイズのchar配列を渡す必要があります。

また、投稿したものは実際にはC ++ではありません-たとえば、次のようになります。

char tempStr[len];

C++ではサポートされていません-これはC99から取得したg++の拡張です。

于 2009-12-30T19:17:52.803 に答える
0

メンバー関数を使用できますifstream::getline。最初のパラメーターとしてバッファーを取り、char*2番目のパラメーターとしてサイズ引数を取ります。

于 2009-12-30T18:59:54.197 に答える