我在大学做C课程,我认为我仍然坚持使用JAVA,因为我无法获得下一个代码(递归):
#include <stdio.h>
#include <conio.h>
#define N 11
int Combination(char *, char *, char *);
void main(){
int i;
char *S1[]={"","abc","abc","abc","abc","ab c","morning Venm","ABZ","12189","12189",
"TTTT"},
*S2[]={"", "", "def", "def", "def", "def", "Good ita!", "ABAXZ", "129", "129",
"X"},
*S3[]={"", "abc", "abcdef", "daebcf", "adfbce", "deab cf","Good morning Vietnam!",
"ABAXABZZ", "12181299", "12112998", "XXXXX"};
for(i=0;i<N;i++){
if(Combination(S1[i],S2[i],S3[i]))
printf("S1: \"%s\", S2: \"%s\", S3: \"%s\",
Combination!\n",S1[i],S2[i],S3[i]);
else printf("S1: \"%s\", S2: \"%s\", S3: \"%s\", Not a
Combination!\n",S1[i],S2[i],S3[i]);
}
_getch();
}
/*Function name : Combination
Input : address of three strings
Output : true(1) if the third string is a combination of the two firsts strings,
false (0) if not
Algorithm : check if the third string is made from the letters of the first and
second strings*/
int Combination(char *S1, char *S2, char *S3)
{
if(!*S1 && !*S2 && !*S3) return 1;
if(*S3==*S1 && *S3==*S2)
return (Combination(S1+1,S2,S3+1)||Combination(S1,S2+1,S3+1));
if(*S3==*S1) return Combination(S1+1,S2,S3+1);
if(*S3==*S2) return Combination(S1,S2+1,S3+1);
return 0;
}
我想了解Combined方法的任何一行。
1)if(!* S1&amp;&amp;!* S2&amp;&amp;!* S3)=检查3个字符串是否为空?
2)部分内容:(S1 + 1,S2,S3 + 1) - 那是做什么的? S1 + 1会给我们数组上的下一个字,还是会给出下一个字母?如果它会给我们下一封信 - 为了什么?如果字符串相等,它已经被解雇了吗?
我很困惑......
答案 0 :(得分:2)
* S1是字符串S1的第一个字符,所以
if (!*S1 && !*S2 && !*S3)
正在检查所有三个字符串的第一个字符是否为空,这意味着它们都是空字符串。
S1 + 1实际上是字符串S1,删除了第一个字符。通过将指针传递给第一个字符,在C中传递字符串。通过传递S1 + 1,字符串的开头向下移动一个字符。
答案 1 :(得分:0)
对于第2部分),S1 + 1将为您提供下一个字符串的地址,而不是下一个字符。下一个字符是(* S1)+ 1。
答案 2 :(得分:0)
if (!*S1)
检查S1
是否为空C字符串。
S1+1
S1
的子串。如果S1
是指向"abc"
的指针,则S1+1
是指向"bc"
的指针。
编辑:
假设S1
是指向char
的指针,就像传递给Combination
函数的参数一样:
...(char *S1, ...
其他一些答案似乎假设S1
是指向char
的指针数组,就像在main
函数中一样:
char *S1[] = ...
你可能应该给他们不同的名字。
答案 3 :(得分:0)
1)if(!* S1&amp;&amp;!* S2&amp;&amp;!* S3)=检查3个字符串是否为空?
它用于检查所有字符指针是否到达字符串的末尾(即)null。如果所有到达结束,则返回1.
2)部分内容:(S1 + 1,S2,S3 + 1) - 那是做什么的? S1 + 1会给我们数组上的下一个字,还是会给出下一个字母?
它会给我们下一个角色。
如果它会给我们下一封信 - 为了什么?如果字符串相等,它已经被解雇了吗?
检查下一个字符的组合。