我想在已经使用char数组处理字符串的程序中添加一个新的(fstream)函数。 问题是下面的代码产生字符串,并且我能想到让它工作的唯一方法是有一个中间函数将char字符串char复制到一个新的char数组中,将它们传递给程序中的函数,返回结果,然后将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]);
}
}
答案 0 :(得分:2)
您可以通过将第一个参数设为const char *
来将字符串作为translateWord的第一个参数传递。然后使用inputStr.c_str()
作为第一个参数调用函数。虽然处理第二个(输出)参数,你需要完全重写translateWord以使用std :: string(最佳解决方案,恕我直言),或者传递一个适当大小的char数组作为第二个参数。
此外,您发布的内容实际上不是C ++ - 例如:
char tempStr[len];
C ++不支持- 它是g ++的扩展,取自C99。
答案 1 :(得分:0)
您可以使用成员函数ifstream::getline
。它需要char*
缓冲区作为第一个参数,size参数作为第二个参数。