Я надеюсь, что это поможет вам, это рабочий код. Я только что внес небольшие изменения в вашу программу и добавил то, что требуется. Скоро я буду оптимизировать это. Но сначала go через код ниже, чтобы понять концепцию.
#include<stdio.h>
int isCharExist(char *str, char c){
int i=0;
while(str[i] != NULL){
if(str[i] == c){
return 1;
}
i++;
}
return 0;
}
char *common(char *a, char *b){
char *result = "";
int index = 0,i,j;
for (i = 0; i < strlen(a); i++){
for ( j = 0; j < strlen(b); j++){
if (a[i] == b[j]){
if(!isCharExist(result, a[i])){
result[index++] = a[i];
result[index] = '\0';//last character of string is always NULL
}
}
}
}
return result;
}
void main(){
char *result = "",*str1,*str2;
//better to assign space before assignment
str1 = "hello world";
str2 = "thank you";
//clrscr();
result = common(str1,str2);
printf("%s",result);
}
Код ниже лучше, чем выше, и с небольшими изменениями, я не удаляю этот код для вашего лучшего понимания.
#include<stdio.h>
int isCharExist(char *result, char c);
char *common(char *a, char *b);
int isCharExist(char *result, char c){
//this function help you to find that current character
//is in your result or not
int i=0;
while(result[i] != NULL){
if(result[i] == c){
//if it find character in result string it return 1
return 1;
}
i++;
}
return 0;//if not find then it return 0
}
char *common(char *a, char *b){
char *result = "";
int index = 0,i,j;
//it is good to keep length in seprate variable before loop
//in loop it calculate length each time
int len1 = strlen(a);
int len2 = strlen(b);
for (i = 0; i < len1; i++){
for ( j = 0; j < len2; j++){
//check equality but not for blank
if (a[i] == b[j] && a[i] != ' '){
if(!isCharExist(result, a[i]))
{
result[index++] = a[i];
result[index] = '\0';//last character of string is always NULL
}
}
}
}
return result;
}
void main(){
char *result = "",*str1,*str2;
//better to assign space before assignment
str1 = "hello world";
str2 = "thank you";
//clrscr();
result = common(str1,str2);
printf("%s",result);
}
Выше приведено лишь несколько изменений в вашей функции, поэтому просто замените вашу функцию не полным кодом.
char *common(char *a, char *b){
char *result = "";
int index = 0,i,j,k, isDuplicate=0;
//it is good to keep length in seprate variable before loop
//in loop it calculate length each time
int len1 = strlen(a);
int len2 = strlen(b);
for (i = 0; i < len1; i++){
for ( j = 0; j < len2; j++){
//check equality but not for blank
if (a[i] == b[j] && a[i] != ' '){
k = 0;
while(result[k] != '\0'){
if(a[i] == result[k]){
isDuplicate = 1;
break;
}
k++;
}
if(!isDuplicate)
{
result[index++] = a[i];
result[index] = '\0';//last character of string is always NULL
}
isDuplicate = 0;
}
}
}
return result;
}