我想写一个函数来检查一个字符串是否只有大写字母,并且字符串中的每个字母都有相同的数量。即AXXA是一个有效的字符串,但是AXX不是。删除[]弄乱了我的程序。发生了什么?
我的checkUpper函数工作正常。但是我的checkLetters函数只会在我的程序运行时第一次运行。
当我在函数返回前摆脱了delete []之后,它会一直工作。但我知道这会造成内存泄漏。
我只想问是什么原因导致它只能第一次工作?以及在删除删除[]后每次如何工作?
任何帮助将不胜感激。非常感谢你。
#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;enter code here
string input;
int NumOfLetters;
//check if everything is uppercase;
bool checkUpper(string input){
for(int i=0;i<input.length();i++)
if(!isupper(input[i])) return false;
return true;
}
//check to see if there are the same number of runners for each team;
bool checkLetters(string input){
char* Letters= new char[input.length()];//worst case, all letters are used once;
NumOfLetters=0; //letter counter
for(int i=0; i<input.length();i++){
if(Letters[NumOfLetters]!=input[i]){
Letters[NumOfLetters]=input[i]; //putting different letters in Letters
NumOfLetters++;
}
}
int *CountLetters= new int[NumOfLetters]; //used to count each letter
for(int i=0; i<NumOfLetters;i++){
for(int j=0;j<input.length();j++)
if(Letters[i]==input[j])CountLetters[i]++; //counting each letter
}
for(int i=0; i<NumOfLetters;i++){
if(CountLetters[i]!=CountLetters[0]){ //comparing number of each letters to the first one;
delete[] Letters;
delete[] CountLetters;
return false;
}
}
delete[] Letters;
delete[] CountLetters;
return true;
}
int main(){
while(true){
cout<<"Enter a string of uppercase characters to indicate places(enter done to terminate):";
cin>>input;
if(input=="done") break;
if(!checkUpper(input)){
cout<<"Uppercase letters ONLY! try again.\n";
continue;
}
if(!checkLetters(input)){
cout<<"Each team must have the same number of runners! try again.\n";
continue;
}
//to be filled;
}
return 0;
}
你的代码是非常难读由于穷人格式。另外,为什么你使用'string'作为字符串数据,'new char []'?对所有字符串数据使用'std :: string'。 – PaulMcKenzie
由于缺少标签格式,您的代码难以阅读。但是好像你的'Letters'和'CountLetters'数组都是从未初始化的,这意味着这个程序的工作机会很小。关于你的崩溃,'delete []'很少是原因 - 原因通常是先前的代码写在数组的边界之外并破坏内存。 –
您发布的代码甚至不会调用'checkLetters()'。给出你在'checkLetters()'中出现问题的陈述,这是一个正面信号,表明你发布的代码与展示你的问题的代码不同。由于'delete'的问题通常是由于其他代码的错误行为(例如指针骚扰覆盖'new'和'delete'在内部使用的数据结构),所以没有人能够帮助您 - 找到代码中的问题是公平的看到大多数人的能力超出。 – Peter