将用户输入段落中的某些字符从小写更改为大写

时间:2014-02-19 07:22:48

标签: c++

嗨再次(如果有人看到我之前的帖子)。我已经在今晚发布了一个关于这个代码的问题,但是我几乎所有的事情都搞清楚并遇到了这个小障碍,所以我又回来了另一个问题。对于我的计算机科学162课程,我们给出了创建一个简单文本编辑器的任务 - 但我们只允许使用cstrings /字符数组,因此不允许使用任何字符串。但是,我们允许使用cstring类来执行某些功能。文本编辑器必须修复小错误,例如:如果一段时间后只有一个空格,则添加第二个空格;如果一个简单的单词如“the”拼写错误(例如“teh”),则自动纠正;如果句子的开头字母没有大写,则将其大写。现在,我得到了修复空格和函数的功能,将'teh'改为'''工作正常,但现在我遇到了一个问题,即在一个新句子的开头大写字母。到目前为止,这是我的代码:

#include <iostream>
#include <cstring>
#include <ctype.h>

using namespace std;
void enter_paragraph(char paragraph[]) {
    cout << "Enter a paragraph:";
    cin.get(paragraph, 300, '#');
}
void check_spaces(char paragraph[], char new_para[]) {
    int l = strlen(paragraph);
    int i = 0;
    int n = 0;
    while (i < l) {
        new_para[n] = paragraph[i];
        n++;
        if (paragraph[i] == '.') {
            if (paragraph[i + 1] == ' ') {
                if (paragraph[i + 2] != ' ') {
                    new_para[n] = ' ';
                    n++;
                    new_para[n] = ' ';
                    n++;
                }
            }
        }
        i++;
    }

}
void check_the(char paragraph[], char new_para[]) {
    int l = strlen(new_para);
    int i = 0;
    while (i < l) {
        if (new_para[i] == 't') {
            if (new_para[i + 1] == 'e') {
                if (new_para[i + 2] == 'h') {
                    new_para[i + 1] = new_para[i + 2];
                    new_para[i + 2] = 'e';
                }
            }
        }
        i++;
    }
}
void check_caps(char paragraph[], char new_para[]) {
    int l = strlen(new_para);
    int i = 0;
    while (i < l) {
        if (new_para[i] == '.') {
            if (new_para[i + 1] == ' ') {
                if (new_para[i + 2] == ' ') {
                    if (islower(new_para[i + 3])) {
                        new_para[i + 3] = (toupper(new_para[i + 3]));
                    }
                }
            }
        }
        i++;
    }
}

int main() {
    char paragraph[300];
    /* prompt user to enter a paragraph (no more than 300 characters) */
    enter_paragraph(paragraph);
    cout << "Here is your paragraph: " << endl << paragraph;

    /* check paragraph for two spaces after each paragraph; if there aren't, then change it */
    char new_para[300];
    check_spaces(paragraph, new_para);

    /* check paragraph for misspelling of "the"; if user typed "teh," change it to "the" */
    check_the(paragraph, new_para);

    /* check paragraph for a capitalized first letter after each period; if it is lowercase, change it */
    check_caps(paragraph, new_para);
    cout << "Here is your revised paragraph: " << endl << new_para;

    /*
     etc etc
     output new corrected paragraph (as a new array, preferably)
     */
    return 0;
}

当我运行这个程序时,一切顺利,除了一件事:如果我输入一个段落并在最初的句点之后放置两个空格(这样程序不必添加空格),它将把这个字母大写跟随那些空间;但是如果我在开始下一段之前的一段时间之后只添加一个空格(以便程序必须添加一个空格),它不会将第一个字母大写。我已经尝试过调整这么多不同的东西,似乎没有什么能解决它。有谁看到我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于你的太空功能。改变它并且它会起作用

 while (i < l) {
        new_para[n] = paragraph[i];
        n++;
        if (paragraph[i] == '.') {
            if (paragraph[i + 1] == ' ') {
                if (paragraph[i + 2] != ' ') {

                    new_para[n] = ' ';
                    n++;
                }
            }
        }
        i++;
    }