我对类代码感到有点困惑。这就是我想要做的事情:
//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;
}
我知道我在“字符串”变量上放了一个“char”但是如果很快“char”很快就会成为字符串呢?有没有办法通过这个?
我总是忘记图书馆。有人可以推荐一些我应该考虑的标准/基础库吗?现在我在想,“genlib.h”(来自课堂)。
C ++正在踢我的屁股。我无法解决一直存在的小错误。告诉我它会变得更好。
答案 0 :(得分:2)
您的代码中存在许多错误:
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 :(得分: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;
}