用C++编译,先要求用户输入两个字符串,再判断是不是一样字母,求高手们出手相助~~重酬!
这个题目真不容易读懂,应该是要求用户输入两个字符串,长度都是50,可以是ACSII表格里的任何字符。然后判断这两个字符串是否用相同的字母。但是在做判断时候,必须要忽略除了...
这个题目真不容易读懂,应该是要求用户输入两个字符串,长度都是50,可以是ACS II表格里的任何字符。然后判断这两个字符串是否用相同的字母。但是在做判断时候,必须要忽略除了字母和数字以外的其他字符,并且把所有字母都转换成小写。如果这两个字符串包含了一样的字母数字,而且这些字母数字出现的次数一样,他们就是可以互相转换的。
打个比方:“Mary”可以转换成“Army”,“Doctor Who"可以转换成”Torchwood“.其他例题看下图1。
一共要求写3个function,一个main,已经写好,如图2。第二个是bool isAnagram(string str1, string str2),第三个是bool isAlphaNumeric(char& c),这个function是用来判断输入的是否是字母和数字,不能用isalpha()这个函数。
图1
图2 展开
打个比方:“Mary”可以转换成“Army”,“Doctor Who"可以转换成”Torchwood“.其他例题看下图1。
一共要求写3个function,一个main,已经写好,如图2。第二个是bool isAnagram(string str1, string str2),第三个是bool isAlphaNumeric(char& c),这个function是用来判断输入的是否是字母和数字,不能用isalpha()这个函数。
图1
图2 展开
2个回答
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "ctype.h"
#include <iostream>
#include <string>
using namespace std;
int mycmp(const void *a,const void *b){
return *(char *)a-*(char *)b;
}
bool isAlphaNumeric(char& c){
return c>='1' && c<='9' || c>='a' && c<='z' || c>='A' && c<='Z';
}
bool isAnagram(string str1, string str2){
char s1[51],s2[51];
int ln=str1.length();
if(ln!=(int)str2.length())
return false;
for(int i=0,j=0,k=0;i<ln;i++){
if(isAlphaNumeric(s1[j]=str1.c_str()[i])){
if(s1[j]>='A' && s1[i]<='Z')
s1[j]|=0x20;
j++;
}
if(isAlphaNumeric(s2[k]=str2.c_str()[i])){
if(s2[k]>='A' && s2[k]<='Z')
s2[k]|=0x20;
k++;
}
}
s1[j]=s2[k]='\0';
if((ln=strlen(s1))!=(int)strlen(s2))
return false;
qsort(s1,ln,sizeof(char),mycmp);
qsort(s2,ln,sizeof(char),mycmp);
return (bool)!strcmp(s1,s2);
}
void main(void){
string str1,str2;
cout << "Please enter the first string:";
getline(cin,str1);
cout << "Please enter the second string:";
getline(cin,str2);
cout << "The two strings are anagrams: " << isAnagram(str1,str2) << endl;
}
#include "ctype.h"
#include <iostream>
#include <string>
using namespace std;
int mycmp(const void *a,const void *b){
return *(char *)a-*(char *)b;
}
bool isAlphaNumeric(char& c){
return c>='1' && c<='9' || c>='a' && c<='z' || c>='A' && c<='Z';
}
bool isAnagram(string str1, string str2){
char s1[51],s2[51];
int ln=str1.length();
if(ln!=(int)str2.length())
return false;
for(int i=0,j=0,k=0;i<ln;i++){
if(isAlphaNumeric(s1[j]=str1.c_str()[i])){
if(s1[j]>='A' && s1[i]<='Z')
s1[j]|=0x20;
j++;
}
if(isAlphaNumeric(s2[k]=str2.c_str()[i])){
if(s2[k]>='A' && s2[k]<='Z')
s2[k]|=0x20;
k++;
}
}
s1[j]=s2[k]='\0';
if((ln=strlen(s1))!=(int)strlen(s2))
return false;
qsort(s1,ln,sizeof(char),mycmp);
qsort(s2,ln,sizeof(char),mycmp);
return (bool)!strcmp(s1,s2);
}
void main(void){
string str1,str2;
cout << "Please enter the first string:";
getline(cin,str1);
cout << "Please enter the second string:";
getline(cin,str2);
cout << "The two strings are anagrams: " << isAnagram(str1,str2) << endl;
}
本回答被提问者和网友采纳
展开全部
把工程保存发到我邮箱帮你
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询