Форматирование C-строк - PullRequest
       2

Форматирование C-строк

0 голосов
/ 15 декабря 2011

Предполагается, что в программе используется функция, которая принимает указатель на 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 ]

2 голосов
/ 15 декабря 2011
        toupper(str[count]);

Преобразует символ в верхний регистр, а затем выбрасывает результат.Вы хотите:

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

Кроме того, это назначение:

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

Вы хотите сравнение:

    if(str[count] == '.'){
0 голосов
/ 15 декабря 2011

Похоже, ваше сравнение неверно.Попробуйте изменить

if(str[count] = '.')

на

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

запомнить -> = является оператором присваивания == является оператором сравнения

(я думаю, что функция Capitalize неправильная,но я не знаю, если это так, как вы хотите, чтобы это было)

0 голосов
/ 15 декабря 2011

У вас есть опечатка здесь:

if(str[count] = '.')

должно быть:

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

Также str[count] = toupper(str[count]);

0 голосов
/ 15 декабря 2011

Вы используете оператор присваивания (=), а не сравнение (==), вам нужно изменить:

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

На:

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

Как указали другиеваше использование toupper также не совсем правильно, так как оно возвращает новое значение, оно не изменяет оригинал, поскольку оно не принимает ссылку.

str[count] = toupper(str[count]);
0 голосов
/ 15 декабря 2011

Это хорошо, но toupper возвращает заглавную версию символа, она не изменяет предоставленный аргумент.Попробуйте это:

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

В качестве упражнения постарайтесь вообще избегать использования C-строк и посмотрите, сможете ли вы сделать это, используя только класс std::string.В конечном итоге вы поймете, что использовать std::string гораздо проще, чем использовать простые старые C-строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...