【发布时间】:2013-05-24 21:25:41
【问题描述】:
我是 C 编程新手。我有一个任务要做。 用户输入两个字符串。我需要做的是创建一个仅由这两个给定字符串的常用字母组成的新字符串。 例如: 如果给出:
str1 = "ABCDZ"
str2 = "ADXYZ"
新字符串将如下所示:"ADZ"。
我不能让它工作。我认为必须有一个更好(更简单)的算法,但是我已经为此花费了太多时间,所以我想完成它..需要你的帮助!
到目前为止我所做的是:
char* commonChars (char* str1, char* str2)
{
char *ptr, *qtr, *arr, *tmp, *ch1, *ch2;
int counter = 1;
ch1 = str1;
ch2 = str2;
arr = (char*) malloc ((strlen(str1)+strlen(str2)+1)*(sizeof(char))); //creating dynamic array
strcpy(arr, str1);
strcat(arr,str2);
for (ptr = arr; ptr < arr + strlen(arr); ptr++)
{
for (qtr = arr; qtr < arr + strlen(arr); qtr++) // count for each char how many times is appears
{
if (*qtr == *ptr && qtr != ptr)
{
counter++;
tmp = qtr;
}
}
if (counter > 1)
{
for (qtr = tmp; *qtr; qtr++) //removing duplicate characters
*(qtr) = *(qtr+1);
}
counter = 1;
}
sortArray(arr, strlen(arr)); // sorting the string in alphabetical order
qtr = arr;
for (ptr = arr; ptr < arr + strlen(arr); ptr++, ch1++, ch2++) //checking if a letter appears in both strings and if at least one of them doesn't contain this letter - remove it
{
for (qtr = ptr; *qtr; qtr++)
{
if (*qtr != *ch1 || *qtr != *ch2)
*qtr = *(qtr+1);
}
}
}
不知道如何完成此代码.. 如有任何建议,我将不胜感激!
【问题讨论】:
-
我注意到你的例子中的字母是按顺序出现的。示例:显然“ADZ”->“AZ”=“AZ”。但 "ZDA" -> "AZ" 可能是 "AZ" "ZA" 或 ""
-
如果一个字母重复 2 次,输出会是什么?例如
str1 = "AABCDZ"和str2 = "ADXYZ" -
是否考虑大写和小写?以下字符串示例
str1 = "ABCDZ"和str2 = "adxyz"的输出可能是什么? -
你可以使用strchr()它让你的算法更容易