1

我想在已经使用 char 数组处理字符串的程序中添加一个新的(fstream)函数。问题是下面的代码会产生字符串,我能想到的唯一方法是让一个中间函数将字符串逐个字符地复制到一个新的字符数组中,然后将它们传递给程序中的函数,取回结果,然后逐个字符地将结果复制回字符串中。

当然(希望)一定有更好的方法吗?

谢谢!

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 函数:

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()作为第一个参数。不过,请处理第二个(输出)参数,您需要完全重写 translateWord 以使用 std::string (最好的解决方案,恕我直言),或者传递适当大小的 char 数组作为第二个参数。

此外,您发布的内容实际上并不是 C++ - 例如:

char tempStr[len];

C++ 不支持 - 它是 g++ 的扩展,取自 C99。

于 2009-12-30T19:17:52.803 回答
0

您可以使用成员函数ifstream::getline。它将char*缓冲区作为第一个参数,将大小参数作为第二个参数。

于 2009-12-30T18:59:54.197 回答