2011-12-15 236 views
0

該程序應該使用一個函數,該函數接受一個指向C字符串的指針作爲參數,並大寫字符串中每個句子的第一個字符。我在輸出時遇到了問題。這是我的代碼:格式化C字符串

#include "stdafx.h" 
#include <cstring> 
#include <iostream> 

using namespace std; 

void Capitalize(char *); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char sentence[1000]; 


    cout << "Please enter a sentence: " << endl; 
    cin.getline(sentence, 1000); 

    char *sentencePtr = sentence; 


    Capitalize(sentencePtr); 

    cout << sentencePtr; 

    cin.get(); 
    return 0; 
} 

void Capitalize(char *str){ 
    int count; 

    for(count = 0; count < strlen(str); count++){ 

     if(str[count] = '.'){ 

      count += 2; 

      toupper(str[count]); 

     } 



    } 

} 
+0

你有什麼麻煩?你能舉一些例子輸入和輸出嗎? – 2011-12-15 07:29:40

回答

0

這是一個好走,但toupper回報字符的大寫形式,它不修改提供了論據。試試這個:

// note, you must use '==', not '=' 
if(str[count] == '.') 
{ 
     count += 2; 
     str[count] = toupper(str[count]); 
} 

作爲練習,儘量避免使用C字符串完全,看看你是否可以只使用std::string類做到這一點。最終,你會意識到使用std::string比使用普通的舊C字符串要容易得多。

0

您使用的賦值運算符(=)不是一個比較(==),您需要更改:

if(str[count] = '.'){ 

要:

if(str[count] == '.'){ 

正如其他人所指出的,您的使用因爲它返回了新的值,它不會修改原信號,因爲它不需要參考。

str[count] = toupper(str[count]); 
2
 toupper(str[count]); 

該轉換字符爲大寫,然後拋出的結果了。你想:

 str[count]=toupper(str[count]); 

而且,這是一個任務:

if(str[count] = '.'){ 

你想要一個比較:

if(str[count] == '.'){ 
0

您在這裏有一個錯字:

if(str[count] = '.') 

應成爲:

if(str[count] == '.') 

此外,str[count] = toupper(str[count]);

0

貌似你的比較是錯誤的。嘗試改變

if(str[count] = '.') 

if(str[count] == '.'){ 

記住 - > =是賦值運算符 ==是比較運算

(我想你的大寫FUNC是錯誤的,但我不知道它如何你想要它)