2014-12-02 33 views
0

我在C++中編寫了一個簡單的函數,使用字符和遍歷字符串中的每個字符串將字符串轉換爲全部小寫字母。有人可以請解釋爲什麼當我在控制檯窗口中運行此程序時,如果函數從不引用cout,我會得到除原始輸入外的輸出。C++使低級函數

#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; 
} 
+2

此代碼不能編譯。 – 2014-12-02 23:11:54

+0

爲什麼不'makelower(a)'? – macfij 2014-12-02 23:13:13

+0

對不起@macfij這就是我的意思。 – 2014-12-02 23:15:30

回答

4

的putchar寫入字符出到stdout http://www.cplusplus.com/reference/cstdio/putchar/

+0

不確定這是否回答這個問題。至少,它不直接*回答它。請擴大您的答案。 – cybermonkey 2014-12-02 23:14:46

+4

@cybermonkey它不能回答這個問題嗎? 「有人可以解釋爲什麼當我在控制檯窗口中運行此程序時,我得到一個輸出...」 – 2014-12-02 23:15:34

+0

@MarkRansom答案仍然應該更詳細地解釋。因爲我在這裏感到困惑,所以我將它標記爲主持人的注意。 – cybermonkey 2014-12-02 23:24:39

0

putchar功能提出輸出所分配的字符stdout。更多相關信息,可found here,你應該,而不是簡單地tolowerchar

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>丟失了,當我正確測試它時停止了編譯的代碼,所以我添加了它。如果您已經擁有它,請將其刪除。

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; 
}