求2和3完整代码主要是3不知道怎么调用函数

img

img


2我写了但是是一维数组 3我用二维数组储存了每个单词 所以就不知道怎么调用函数了

代码如下,但是示例有个输出 puiz 的复数虽然是 puizzes 。但是题目中并没有描述双写词尾字母的规则。所以我没有考虑。

#include<iostream>
#include<string.h>
using namespace std;

void RegularPluralForm(char * word);
void MultiplePluralForm(char * target, char * source);

int main() {
    char str1[201];
    char str2[400];
    cin.getline(str1, 201, '\n');
    MultiplePluralForm(str2, str1);
    cout << str2 << endl;
    return 0;
}

void RegularPluralForm(char * word) {
    int len = strlen(word);

    switch (word[len - 1]) {
        case 's':
        case 'x':
        case 'z':
            word[len] = 'e';
            word[len + 1] = 's' ;
            word[len + 2] = '\0';
            break;
        case 'h':
            if (word[len - 2] == 's' || word[len - 2] == 'c' ) {
                word[len] = 'e';
                word[len + 1] = 's' ;
                word[len + 2] = '\0';
            } else {
                word[len ] = 's' ;
                word[len + 1] = '\0';
            }

            break;
        case 'y' :
            if ( word[len - 2] == 'a' || word[len - 2] == 'i' || word[len - 2] == 'e' || word[len - 2] == 'o' || word[len - 2] == 'u') {
                word[len ] = 's' ;
                word[len + 1] = '\0';
            } else {
                word[len - 1 ] = 'i';
                word[len] = 'e';
                word[len + 1] = 's' ;
                word[len + 2] = '\0';
            }
            break;
        case 'f' :
            word[len - 1] = 'v';
            word[len] = 'e';
            word[len + 1] = 's';
            word[len + 2] = '\0';
            break;
        case 'e':
            if ( word[len - 2] == 'f' ) {
                word[len - 2] = 'v';
                word[len - 1 ] = 'e';
                word[len ] = 's';
                word[len + 1] = '\0';
            } else {
                word[len ] = 's' ;
                word[len + 1] = '\0';
            }
        default :
            word[len ] = 's' ;
            word[len + 1] = '\0';
    }
}

void MultiplePluralForm(char * target, char * source) {
    int len = 0;
    for ( int i = 0 ; source[i] != '\0' ; i++ ) {
        // 读取一个单词转成复数
        char word[30] = {0};
        int j = 0 ;
        for (j = 0 ;  source[i + j] != ' ' && source[i + j] != '\0' ; j ++) {
            word[j] = source[i + j];
        }
        i += j;
        word[j] = '\0';
        RegularPluralForm(word);
        for ( j = 0; word[j] != '\0' ; j++) {
            target[len + j] = word[j];
            if( word[j+1] == '\0' ){
                j++;
                target[len+j] = ' ';
                j++;
                break;
            }
        }
        len += j;
    }
    target[len] = '\0';
}

状态不是很好,但是勉强能看。