Я написал простую функцию на 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;
}
Путчар пишет персонажа в стандартный вывод
http://www.cplusplus.com/reference/cstdio/putchar/
Есть несколько проблем с вашим кодом. Пожалуй самый
Важным является то, что вы не определили, что вы подразумеваете под преобразованием
в нижнем регистре; это не всегда так очевидно, как кажется. Тем не мение:
Для перебора символов в строке вы используете итераторы, и вы
тест на конец; в 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;
}
putchar
функция путы выводит назначенный символ stdout
, Дополнительная информация об этом может быть нашел здесь, и ты должен вместо просто 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>
отсутствовал, что помешало скомпилировать код при правильной проверке, поэтому я добавил его. Удалите, если он у вас уже есть.