【发布时间】:2015-03-13 11:00:01
【问题描述】:
我在下面为一个小程序编写了这段代码,该程序获取一个字符串(并将其放入数组中)和一个数字,然后它在数组中搜索以查找它是否有重复的字符(并计算重复的次数) , 如果是这样的话;程序将比较特定字符重复的次数以及重复次数是否等于用户给出的次数;程序将用字符“A”替换它们。例如;如果我们给程序“BBCC”和数字 2,它应该给我们结果“AAAA”。问题是我的代码适用于某些示例,不适用于上面的示例。代码如下:
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
char str[30];
int i, j, k, l, number, counter = 0;
char ch;
cout << "Enter a string: ";
gets (str);
cout << "\nEnter a number: ";
cin >> number;
for (i =0; str[i]; i++){
ch = str[i];
for (j = 0; str[j]; j++){
if (str[j] == ch){
counter++;
}
}
if (counter == number){
for (k = 0; str[k]; k++){
if (str[k] == ch){
str[k] = 'A';
}
}
}
}
for (l = 0; str[l]; l++){
cout << str[l];
}
getchar ();
return 0;
}
另一个错误是,如果我们给它字符串“ABC”和数字 2;结果将是“AAC”! 我知道我的代码有点乱,因为我是初学者,所以请道歉并帮助我解决我的问题。 谢谢。
【问题讨论】:
-
我不确定这个问题将如何帮助未来的访客? ://
-
永远不要使用
gets,而是使用std::string和普通输入运算符>>。 -
至于你的问题,学习如何使用调试器,除了编译器和编辑器,它应该是你工具箱中最常用的工具。使用调试器,您可以逐行单步执行代码,同时查看所有相关变量的值,这将帮助您了解代码的行为是否符合您的预期。
-
你应该在external for开头将counter初始化为0
-
您永远不会重置您的计数器。在外循环的第一行将其设置为 1,或者更好地在此处声明它(您不需要在其他地方使用该变量)。此外,正如其他人指出的那样,避免将 stdio 与 iostream 混合使用。
标签: c++ string if-statement for-loop counter