2009-12-30 4 views
1

Je veux ajouter une nouvelle (fstream) fonction dans un programme qui utilise déjà des tableaux pour traiter les chaînes ombles. Le problème est que le code ci-dessous donne des chaînes, et la seule façon que je peux penser à obtenir que cela fonctionne serait d'avoir une fonction intermédiaire qui copie les chaînes, char par char, dans un nouveau tableau de caractères, les transmettre aux les fonctions dans le programme, récupérer les résultats, puis copiez les résultats char par char dans la chaîne.getline() être utilisé pour obtenir un tableau de caractères d'un fstream

sûrement (je l'espère) il doit y avoir une meilleure façon?

Merci!

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; 

la 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

Il serait utile de savoir ce que translateword() ne - s'il vous plaît poster au moins la déclaration. –

+0

ajouté maintenant Neil - (il fait une traduction en latin cochon) –

+0

Cela est voué à l'échec d'une manière très horrible! –

Répondre

2

Vous pouvez passer une chaîne comme premier paramètre à translateWord en faisant le premier paramètre un const char *. Ensuite, vous appelez la fonction avec inputStr.c_str() comme premier paramètre. Traitez le second paramètre (de sortie), vous devez réécrire complètement translateWord pour utiliser std :: string (la meilleure solution, IMHO), ou passer un tableau de taille appropriée de char comme deuxième paramètre.

De plus, ce que vous avez posté est pas réellement C++ - par exemple:

char tempStr[len]; 

est pas pris en charge par C++ - il est une extension de g ++, pris de C99.

0

Vous pouvez utiliser la fonction de membre ifstream::getline. Il prend un buffer char* comme premier paramètre, et un argument de taille comme second.

+0

pas sûr que je suis, im utilisant déjà getline, bien que cela semble être la sortie d'une chaîne? –

+0

Il existe deux fonctions getline. –

+0

Bhatia, la suggestion est que vous devriez utiliser une fonction getline * différente *. Les objets Stream ont leur propre méthode getline qui remplit un tableau de caractères. Utilisez cela à la place de la fonction getline autonome de l'en-tête de chaîne. Cela répond directement à la question que vous avez posée, tandis que la réponse de Neil résout le problème sous-jacent de votre programme. Si vous avez besoin de convertir en un tableau et de le convertir en chaîne, vous devriez peut-être utiliser uniquement des chaînes. ignorer toutes les conversions –