簡體   English   中英

格式化C字符串

[英]Formatting C-strings

程序應該使用一個函數來接受一個指向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]);

        }



    }

}
        toupper(str[count]);

這會將字符轉換為大寫,然后將結果拋出。 你要:

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

此外,這是一項任務:

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

你想要一個比較:

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

這是一個很好的去,但toupper 返回一個字符的大寫版本,它不會修改提供的參數。 嘗試這個:

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

作為練習,嘗試避免完全使用C字符串,並查看是否可以僅使用std::string類來完成。 最終,您將意識到使用std::string比使用普通的舊C字符串容易得多。

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

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

至:

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

正如其他人所指出的那樣,你對toupper的使用也不是很正確,因為它返回新值,它不會修改orignal,因為它沒有參考。

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

你有一個拼寫錯誤:

if(str[count] = '.')

應該:

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

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

看起來你的比較是錯誤的。 嘗試改變

if(str[count] = '.')

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

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

(我認為你的資本化功能是錯誤的,但我不知道你的想法是否如此)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM