大写字符,toupper如何工作?

时间:2014-10-17 20:30:45

标签: c++ arrays character capitalization capitalize

我需要使用一个字符数组并获取数组中的字符并根据需要大写并小写它们。我正在观看toupper及其示例,但我对这是如何工作感到困惑。从cplusplus.com上给出的例子看,我写了

int main(){
    int i = 0;
    char str[] = "This is a test.";
    while(str[i]){
        putchar(toupper(str[i]));
        i++;
    }
    for(int i = 0; i < 15; i++){
        cout << str[i];
    }
}

有两件事我不明白。第一个是没有底部的cout,程序打印出这是一个测试。 putchar打印到屏幕上吗? (在示例中没有解释putchar的使用)。但我的第二个更重要的问题是为什么底部的cout仍然打印出来这是一个测试。它不会改变str []中的字符吗?我还有另一种方法吗(请记住我需要使用字符数组)?

3 个答案:

答案 0 :(得分:2)

是的,putchar()将一个字符打印到程序的标准输出中。这是它的目的。它是大写输出的来源。

程序底部的cout打印原始字符串,因为您从未对其进行修改。 toupper()函数没有 - 确实不能 - 修改其参数。相反,它返回大写字符。

答案 1 :(得分:1)

putchar将单个字符写入输出:http://www.cplusplus.com/reference/cstdio/putchar/

结果,第一个while循环将每个字符从str一次转换为大写并输出它们。但是,它不会改变str的内容 - 这解释了第二个循环的小写输出。

编辑:

我扩展了第一个循环:

// Loop until we've reached the end of the string 'str'
while(str[i]){
    // Convert str[i] to upper case, but then store that elsewhere. Do not modify str[i].
    char upperChar = toupper(str[i]);
    // Output our new character to the screen
    putchar(upperChar);
    i++;
}

答案 2 :(得分:-2)

我在使用toupper在string / cin上遇到一个小问题, 我正在尝试使用toupper使其更容易一些。

如果我这样做,

string answer;
getline(cin,answer); answer=toupper(answer) 
//and then a bunch of answers

我的问题是,当我尝试构建和播放时,我得到了这个

error: no matching function for call to 'toupper(std::__cxxll::string&)'

如果有人能提供帮助,我将不胜感激!

〜C-3PO

P.S。 我的头文件是: 包括iostream 包括字符串 包括cstdlib 包括windows.h 包括算法 包括ctype.h 包括stdio.h