Базовый C ++: конвертировать из char в строку - PullRequest
1 голос
/ 08 января 2012

Я немного смущен кодом класса. Вот что я пытаюсь сделать:

//Program takes "string text" and compares it to "string remove".  Any letters in
//common between the two get deleted and the remaining string gets returned. 
#include <string>
#include "genlib.h"

string CensorString1(string text, string remove);

int main() {
    CensorString1("abcdef", "abc");
    return 0;
}

string CensorString1(string text, string remove) {
    for (int i = 0; text[i]; i++){
        for (int n = 0; remove[n]; n++){
            if (i != n){
                string outputString = ' '; //to store non repeated chars in,
                                           //forming my return string
                outputString += i;
                }
            }
        }
        return outputString;
}
  1. Я получаю сообщение об ошибке "outputString + = 1", в котором говорится: "невозможно преобразовать из" char "в станд :: basic_string
  2. Я также получаю сообщение об ошибке "return outputString", говорящее: необъявленный идентификатор * 1007 ??????? *

Я понял, что я помещаю "char" в переменную "string", но что если вскоре этот "char" скоро станет строкой? Есть ли способ передать это?

Я всегда забываю библиотеки. Может ли кто-нибудь порекомендовать пару стандартных / базовых библиотек, о которых я всегда должен думать? Прямо сейчас я думаю, "genlib.h" (из класса).

C ++ пинает меня в задницу. Я не могу обойти постоянные маленькие ошибки. Скажите мне, что станет лучше.

Ответы [ 4 ]

2 голосов
/ 08 января 2012

В вашем коде много ошибок:

  • Ваш outputString должен находиться во внешней области видимости (синтаксис)
  • Вы сравниваете i с n вместоот text[i] до remove[n] (семантическое)
  • Вы добавляете i к выводу вместо text[i] (семантическое)
  • Вы игнорируете возвращение CensorString1 (семантическое))

Вот ваш модифицированный код:

string CensorString1(string text, string remove) {
    string outputString;
    for (int i = 0; text[i] ; i++){
        for (int n = 0; remove[n] ; n++){
            if (text[i] != remove[n]){
                outputString += text[i];
            }
        }
    }
    return outputString;
}

У этого есть некоторые остающиеся проблемы.Например, используя text[i] и remove[n] для условий завершения.Это также очень неэффективно, но это должно быть достойное начало.

1 голос
/ 08 января 2012

В любом случае, строки всегда в двойных кавычках в C и C ++.Константы в одинарных кавычках являются константами символов.Исправьте это, и с вами, вероятно, все будет в порядке.

Кроме того, посмотрите на этот вопрос SO: Как добавить int в строку в C ++?

Удачив Стэнфорде!

0 голосов
/ 08 января 2012

Это реализация того, что, я думаю, вы хотите, в вашем коде есть несколько проблем, которые только что были описаны, описанные в нескольких других ответах.

std::string CensorString1(std::string text, std::string remove) {
    std::string result;
    for (int i = 0; i<text.length(); i++) {
        const char ch = text[i];
        if(remove.find(ch) == -1)
                result.append(1,ch);
    }
    return result;
}
0 голосов
/ 08 января 2012

Там есть некоторые проблемы:

string outputString = ' '; попытается построить string из char, чего вы не можете сделать. Вы можете назначить a char для string, поэтому это должно быть действительно:

string outputString;
outputString = ' ';

Тогда outputString виден только внутри вашего if, поэтому он не будет действовать как аккумулятор, а скорее будет создан и уничтожен.

Вы также пытаетесь добавить в строку индексы символов вместо символов, что, как я думаю, вам не нужно делать. Похоже, вы смешиваете C и C ++.

Например, если вы хотите напечатать символы строки, вы можете сделать что-то вроде:

string s("Test");
for (int i=0;i<s.length();i++)
    cout << s[i];

Наконец, я бы сказал, что если вы хотите удалить символы в text, которые также появляются в remove, вам необходимо убедиться, что ни один из символов в remove не соответствует вашему текущему символу, прежде чем Вы добавляете его в строку вывода.

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