我的C++代码中有一个棘手的错误;如何解决它
A tricky bug in my C++ code; How to fix it?
我在下面为一个小程序编写了这段代码,该程序获取一个字符串(并将其放入数组中)和一个数字,然后它搜索数组以查找它是否具有重复字符(并计算重复次数),如果是这样;程序将比较特定字符重复的次数以及重复次数是否等于用户给出的数字;该程序将替换他们带有字符"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"!我知道我的代码有点混乱,因为我是初学者,所以请道歉并帮助我解决问题。谢谢。
您需要
在循环中重置counter
变量。
对于ABC
示例:
- 循环将首先计数
A
s。有 1 A,所以counter = 1
. - 下一次迭代将计数
B
秒。有 1 B,所以计数器增加到counter = 2
! - 这是输入的数字,因此它将用
A
=B
替换所有>AAC
for (i = 0 ; str[ i ] ; i ++ )
{
if( str[ i ] != 'A' ) // because replacing A with A is pointless
{
counter = 0 ;
ch = str[ i ] ;
for ( j = 0 ; str[ j ] ; j ++ )
{
if ( str[ j ] == ch )
{
counter ++ ;
}
}
if (counter == number)
{
for ( j = 0 ; str[ j ] ; j ++ )
{
if ( str[ j ] == ch )
{
str[ j ] = 'A' ;
}
}
}
}
}
我试图将所有关于更正的评论+一些优化放在一起,请告诉是否有任何问题
编辑:
C++11 对他的简化来说是美丽的;-)
map< char , vector< int > > counters ;
for (i = 0 ; str[ i ] ; i ++ )
{
counters[ str[ i ] ].push_back( i ) ;
}
for( pair< char , vector< int > > liste : counters )
{
vector< int > vec = liste.second ;
if( vec.size( ) == number )
for( int elt : vec )
str[ elt ] = 'A' ;
}
说明:我浏览了数组,将每个索引都存储在与 char 关联的索引列表中(映射的用途)
最后,我只查看每个字符的向量大小,如果大小等于 number
我浏览此列表以将每个元素按索引"指向"到"A"
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?