#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char array[] = "ABCD";
char array1[] = "AB";
int size = strlen(array);
int size1 = strlen(array1);
int temp[size];
int no = 0;
for (int i = 0; i< size1; i++)
{
for (int j = 0; j< size; j++)
{
if (array1[i]==array[j])
{
for(int k = 0; k<size ; k++)
{
if (temp[k] != j)
{
temp[no] = j;
no++;
}
}
}
}
}
for (int i = 0; i<size; i++)
cout<<endl<<temp[i]<<" ";
return 0;
}
请帮助解决这个问题,如果您有其他方法,请给我打电话。 同样,数组或字符串是解决此问题的更好方法。 我用c ++写作 提前谢谢
答案 0 :(得分:1)
(我最近将此作为我的学生的测验,但我们使用的是Groovy和Java。)
简单的方法:创建字符串("ABCD"
)和打击匹配字母的副本,以便它们不会再次匹配,例如匹配“D”和“一个“,副本将是"_BC_"
,它与另一个”D“不匹配。
答案 1 :(得分:0)
您还可以计算每个字符串中每个字母的出现次数,并确保第二个字符串中每个字母的计数小于或等于第一个字符串中每个字母的计数。如果要将多个潜在子串与单个字母集合进行比较(例如,将字典中的所有单词与Boggle中的当前字母进行比较),这可能会更好。
此代码将执行此操作。它的主要限制是它只适用于包含英文字母中26个大写字母的字符串。但它得到了这个想法。
#include <iostream>
#include <cstring>
using namespace std;
void stringToArray(char *theString, int *countArray) {
int stringLength = strlen(theString);
for (int i=0; i<26; i++) {
countArray[i] = 0;
}
for (int i=0; i<stringLength; i++) {
countArray[theString[i] - 'A']++;
}
}
bool arrayIsSubset(int *superCount, int *subCount) {
//returns true if subCount is a subset of superCount
bool isSubset = true;
for (int i=0; i<26 && isSubset; i++) {
isSubset = subCount[i] <= superCount[i];
}
return isSubset;
}
int main()
{
char array[] = "ABCD";
char array1[] = "AB";
char array2[] = "ABB";
int letterCount[26], letterCount1[26], letterCount2[26];
stringToArray(array, letterCount);
stringToArray(array1, letterCount1);
stringToArray(array2, letterCount2);
cout << "array1 is " << (arrayIsSubset(letterCount, letterCount1) ? "" : "not ") << "a subset" << endl;
cout << "array2 is " << (arrayIsSubset(letterCount, letterCount2) ? "" : "not ") << "a subset" << endl;
}
产生
array1 is a subset
array2 is not a subset