我在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;
}
答案 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>
丢失,导致代码停止编译,因此我将其添加进去。如果已经有,请将其删除。