Basic C ++:从char转换为string

时间:2012-01-08 13:10:56

标签: c++ string char

我对类代码感到有点困惑。这就是我想要做的事情:

//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“转换为 的std :: basic_string的
  2. 我也在“return outputString”上收到错误说:未声明的标识符 ???????
  3. 我知道我在“字符串”变量上放了一个“char”但是如果很快“char”很快就会成为字符串呢?有没有办法通过这个?

    我总是忘记图书馆。有人可以推荐一些我应该考虑的标准/基础库吗?现在我在想,“genlib.h”(来自课堂)。

    C ++正在踢我的屁股。我无法解决一直存在的小错误。告诉我它会变得更好。

4 个答案:

答案 0 :(得分:2)

您的代码中存在许多错误:

  • 您的outputString需要位于外部范围(语法)
  • 您将in进行比较,而不是将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 :(得分:1)

无论如何,C和C ++中的字符串总是双引号。单引号常量是char常量。解决这个问题,你可能应该没事。

另外,请看这个问题:How do you append an int to a string in C++?

斯坦福大学好运!

答案 2 :(得分:0)

那里有一些问题:

string outputString = ' ';会尝试从string构建char,但您无法做到。您可以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中没有任何字符在将其添加到输出字符串之前匹配当前字符。

答案 3 :(得分:0)

这是我认为你想要的实现,你的代码有多个问题,只是在其他多个答案中描述了。

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;
}