字符串函数 - 将单数转换为复数

时间:2015-10-17 11:23:01

标签: c++ string

我正在编写一个将名词改为复数的函数 除了以y结尾的单词之外,每个条件都很有效 它应该像输入一样工作:飞行输出:苍蝇 但输出结果如下:flis

#include <iostream> 
#include <fstream>

using namespace std;
void change_to_plural(char* input_string, char* output_string) // changing to plural
{
    int n;
    n = strlen(input_string);
    if (input_string[n - 1] == 'y') //ends with y
    {
        input_string[n + 2] = '\0';
        input_string[n - 1] = 'i';
        input_string[n] = 'e';
        input_string[n + 1] = 's';

    }
    if (input_string[n - 1] == 's' || ((input_string[n - 2] == 's') && (input_string[n - 1] == 'h'))) // ends with s or sh
    {
        input_string[n] = 'e';
        input_string[n + 1] = 's';
        input_string[n + 2] = '\0';
    }
    else //other cases
    {
        input_string[n] = 's';
        input_string[n + 1] = '\0';
    }
    output_string = input_string;
    n = strlen(input_string);
    for (int i = 0; i < n; i++)
        cout << output_string[i];
}


void main() {

    char in[10], out[10];
    int k;
    cout << "How many words would you like to try ? ";
        cin >> k;
        for (int i = 0; i < k; i++)
        {
            cout << "Please enter a word : ";
            cin >> in;
            cout << "Its plural is : ";
            change_to_plural(in, out);
            cout << endl;
        }
    cout << endl;
}

运行样本

enter image description here

1 个答案:

答案 0 :(得分:1)

您缺少其他 if语句(添加所有大写注释,如果缺少,请希望您注意到它)。所以,正因为如此,它仍然适用于其他情况&#34;分支。

if (input_string[n - 1] == 'y') //ends with y
{
    input_string[n + 2] = '\0';
    input_string[n - 1] = 'i';
    input_string[n] = 'e';
    input_string[n + 1] = 's';

}
// MISSING ELSE HERE!!!!
else if (input_string[n - 1] == 's' || ((input_string[n - 2] == 's') && (input_string[n - 1] == 'h'))) // ends with s or sh
{
    input_string[n] = 'e';
    input_string[n + 1] = 's';
    input_string[n + 2] = '\0';
}
else //other cases
{
    input_string[n] = 's';
    input_string[n + 1] = '\0';
}