C ++降低功能

时间:2014-12-02 23:09:49

标签: c++ string tolower

我在c ++中编写了一个简单的函数,使用字符将字符串转换为所有小写字母,并迭代字符串中的每个字符串。有人可以解释为什么当我在控制台窗口中运行这个程序时,如果函数从不引用cout,我会得到除原始输入之外的输出。

#include <iostream>
#include <cctype>
#include <cstdlib>
using namespace std;
string makelower(string text)
{
    int iter = 0;
    char cha;
    string newtext;
    while (iter < text.length())
    {
        cha = text[iter];
        cha = tolower(cha);
        newtext+=cha;
        iter++;
    }
    return(newtext);
}

int main()
{
    string a;
    cin>>a;
    a = makelower(a);
    cout<<a;
}

3 个答案:

答案 0 :(得分:4)

putchar将一个字符写入stdout http://www.cplusplus.com/reference/cstdio/putchar/

答案 1 :(得分:1)

您的代码存在许多问题。也许是最多的 重要的是你没有通过转换来定义你的意思 小写;它并不像看起来那么明显。但是:

  • 要迭代字符串中的字符,您可以使用迭代器 测试结束;在C ++ 11中,您可以使用基于范围的循环。

  • tolower的单个参数形式的参数必须具有值 介于0和UCHAR_MAX之间;如果您有char,这通常是 通过将其转换为unsigned char来实现。

  • 如果要返回字符串,则应将字符追加到 当你转换它们时;或者,您可以进行适当的更改 让makelower采用非const引用。我推荐的 前者。

考虑所有这些因素:

std::string
makeLower( std::string const& original )
{
    std::string results;
    for ( unsigned char ch : text ) {
        results += std::tolower( ch );
    }
    return results;
}

要使用此功能,请使用字符串调用它,然后进行初始化 另一个字符串及其结果,或将其分配给字符串。或者只是使用 它在一个需要字符串的表达式中。

std::string line;
while ( std::getline( std::cin, a ) && !line.empty() ) {
    std::cout << makeLower( a ) << std::endl;
}

答案 2 :(得分:0)

putchar函数 put 将指定的字符输出到stdout。有关此问题的其他信息可以是found here,您应该而不是只需tolower char

string makelower(string text)
{
    int iter = 0;
    char cha;
    while (text[iter])
    {
        tolower(text[iter]);
        iter++;
    }
return(text);
}

制作这样的完整计划(我也使代码更有效率):

#include "stdafx.h"
#include <iostream>
#include <ctype.h>
#include <string>
#include <cstdlib>
using namespace std;

string makelower(string text)
{
    int iter = 0;
    while (text[iter])
    {
        tolower(text[iter]);
        iter++;
    }
    return(text);
}

int main()
{
    string a;
    cin >> a;
    a = makelower(a);
    cin >> a;
}

当我正确测试时,#include <string>丢失,导致代码停止编译,因此我将其添加进去。如果已经有,请将其删除。