格式化C字符串

时间:2011-12-15 07:27:05

标签: c++ string

程序应该使用一个接受指向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]);

        }



    }

}

5 个答案:

答案 0 :(得分:2)

        toupper(str[count]);

这会将字符转换为大写,然后将结果抛出。你想要:

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

此外,这是一项任务:

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

您想要进行比较:

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

答案 1 :(得分:0)

这是一个不错的选择,但是toupper 返回字符的大写版本,它不会修改提供的参数。试试这个:

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

作为练习,请尽量避免使用C字符串,并查看是否可以仅使用std::string类来完成。最终,您将意识到使用std::string比使用普通的旧C字符串要容易得多。

答案 2 :(得分:0)

您使用的是赋值运算符(=)而不是比较(==),您需要更改:

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

要:

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

正如其他人所指出的那样,你对toupper的使用也不是很正确,因为它返回新值,它不会修改orignal,因为它没有参考。

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

答案 3 :(得分:0)

你这里有一个错字:

if(str[count] = '.')

应该是:

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

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

答案 4 :(得分:0)

看起来你的比较是错误的。尝试更改

if(str[count] = '.')

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

记住 - &gt; =是赋值运算符 ==是比较运算符

(我认为你的资本化功能是错误的,但我不知道你的性能是否如此)