c++改错:帮我找出下面程序的错误,不胜感激!
题目:根据字符串特征给字符串打分1.不是回文字符串,得0分。2.是回文字符串,且长度为奇数,的1分。3.是回文字符串,且长度为偶数,则得分:2+前半段字符串的得分。如:“...
题目:根据字符串特征给字符串打分
1. 不是回文字符串,得0分。
2.是回文字符串,且长度为奇数,的1分。
3.是回文字符串,且长度为偶数,则得分:2+前半段字符串的得分。
如:“abc”0分,“abcba”1分,"abaabaabaaba"5分
#include<iostream.h>
#include<string.h>
char*substr(char*str,int n){
if(n>strlen(str))
return str;
else{
char*tmp=new char[n+1];
for(int i=0;i<n;++i)
*(tmp+i)=*(str+i);
*tmp='\0';
strcpy(str,tmp);
delete[]tmp;
return str;
}
}
int count(char*str){
int len=strlen(str);
for(int i=0;i<len/2;++i){
if(*(str+i)!=*(str+len-i-1))return 0;
}
if(len%2)return 1;
else{
str=substr(str,len/2);
return count(str)+2;
}
}
void main(){
char*str=new char[31];
cout<<"输入一个字符串(不超过30):";
cin.getline(str,30);
cout<<"该字符串得分:"<<count(str)<<endl;
delete[]str;
} 展开
1. 不是回文字符串,得0分。
2.是回文字符串,且长度为奇数,的1分。
3.是回文字符串,且长度为偶数,则得分:2+前半段字符串的得分。
如:“abc”0分,“abcba”1分,"abaabaabaaba"5分
#include<iostream.h>
#include<string.h>
char*substr(char*str,int n){
if(n>strlen(str))
return str;
else{
char*tmp=new char[n+1];
for(int i=0;i<n;++i)
*(tmp+i)=*(str+i);
*tmp='\0';
strcpy(str,tmp);
delete[]tmp;
return str;
}
}
int count(char*str){
int len=strlen(str);
for(int i=0;i<len/2;++i){
if(*(str+i)!=*(str+len-i-1))return 0;
}
if(len%2)return 1;
else{
str=substr(str,len/2);
return count(str)+2;
}
}
void main(){
char*str=new char[31];
cout<<"输入一个字符串(不超过30):";
cin.getline(str,30);
cout<<"该字符串得分:"<<count(str)<<endl;
delete[]str;
} 展开
2个回答
2011-09-23
展开全部
#include<iostream>
#include<math.h>
using namespace std;
main (){
int n,o;
int is_prime=true;
cout << \"please write a number\" << endl;
cin >> n;
for(int m=2;m<=sqrt(static_cast<double>(n));m++){
if(n%m==0){
is_prime=false;
}
}
if(is_prime==true){
cout << \"is prime\" << endl;
}
else{
cout << \"isn\'t prime\" << endl;
}
return 0;
}
这样子~
#include<math.h>
using namespace std;
main (){
int n,o;
int is_prime=true;
cout << \"please write a number\" << endl;
cin >> n;
for(int m=2;m<=sqrt(static_cast<double>(n));m++){
if(n%m==0){
is_prime=false;
}
}
if(is_prime==true){
cout << \"is prime\" << endl;
}
else{
cout << \"isn\'t prime\" << endl;
}
return 0;
}
这样子~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char*substr(char*str,int n){
if(n>strlen(str))
return str;
else{
char*tmp=new char[n+1];
for(int i=0;i<n;++i)
*(tmp+i)=*(str+i);
*(tmp+n)='\0';//不是*tmp='\0';
strcpy(str,tmp);
delete[]tmp;
return str;
}
}
if(n>strlen(str))
return str;
else{
char*tmp=new char[n+1];
for(int i=0;i<n;++i)
*(tmp+i)=*(str+i);
*(tmp+n)='\0';//不是*tmp='\0';
strcpy(str,tmp);
delete[]tmp;
return str;
}
}
更多追问追答
追问
嗯,那里是个错误,但改正后调试还是不能实现题目第3点的要求,如我输入“abaabaabaaba”得出的结果是2分,正确的应该是5分.
追答
输出是5,你确定输入没错?
用下面这段mian函数测试下:
void main(){
//char*str=new char[31];
//cout<<"输入一个字符串(不超过30):";
//cin.getline(str,30);
char *str="abaabaabaaba";
cout<<str<<endl;
cout<<"该字符串得分:"<<count(str)<<endl;
//delete[]str;
system("pause");
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询