0

我在 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;
}
4

3 回答 3

4

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

于 2014-12-02T23:13:06.243 回答
1

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

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

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

  • 如果要返回字符串,则应在转换字符时将字符附加到其中;或者,您可以通过makelower采用非常量引用来进行适当的更改。我推荐前者。

考虑到所有这些:

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;
}
于 2014-12-02T23:39:30.403 回答
0

putsputchar函数将分配的字符输出到。可以在此处找到有关此的其他信息您应该改为stdouttolowerchar

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>我正确测试它时,它会阻止代码编译,所以我添加了它。如果你已经拥有它,请将其删除。

于 2014-12-02T23:23:55.707 回答