函数和字符串,检查输入字符串是否匹配

时间:2018-10-09 09:24:25

标签: c arrays string function char

我想创建一个名为LetterDifference(char *wordA, char *wordB)

的函数

我希望函数扫描两个单词,如果单词之间有一个字母差异,则返回1。例如,如果

wordA = cool

wordB = tool

注意:WordAWordB的长度始终相同

我希望函数返回1

这是我尝试过的,我的代码无法编译,我认为我的理解存在错误。有人可以帮我吗?

int LetterDifference(char *wordA, char *wordB)
{
    int i;
    int count = strlen(word1);
    while (i < strlen(wordA)) {
        if (wordA[i] == wordB[i]) {
            count = count - 1;
            i++;
        }
    }
    if (count == 1) {
        return 1;
    }
}

2 个答案:

答案 0 :(得分:1)

此@new编码器背后的逻辑非常简单。

我想先指出一些需要纠正的错误。

  1. wordAwordB长度不相等的情况下,控件超出范围。您需要确保两个单词的长度相等,然后再继续。
  2. word1(您用来将count变量初始化为该变量的长度)不存在。相反,它应该是wordA
  3. 对于count并非为1的情况,没有返回值。

解决方案:

您只需要从0循环到任意一个字符串的长度即可。从每个索引的两个字符串中检查相应的元素/字符,对于每个不等字符,增加count er变量。如果count er最终等于1。这意味着存在一个字母的差异。

我已经在下面发布了代码。它还可以确保用户仅输入相等长度的字符串。希望对您有所帮助。

代码:

#include<stdio.h>
#include<string.h>

int LetterDifference(char[] , char[] );

int main() {
  int l1, l2, flag = 0, res;
  char a[10], b[10];
  while(flag==0) {
    printf("\nEnter 2 words each of the same length:");
    printf("\nenter the 1st word: ");
    scanf("%s",&a);
    printf("\nenter the 2nd word: ");
    scanf("%s",&b);
    l1 = strlen(a);
    l2 = strlen(b);
    if(l1==l2) {
      flag = 1;
    }
    else {
      printf("\nlengths of the words are unequal...enter again!!!");
      flag = 0;
    }
  }
  printf("\n%s\n%s",a,b);
  res = LetterDifference(a, b);
  if(res==1) {
    printf("\nThere is a 1-letter difference.");
  }
  else {
    printf("\nNO one letter difference.");
  }
  return 0;
}

int LetterDifference(char wordA[], char wordB[])
{
    int i, count = 0;
    int j,c[strlen(wordA)];
    //use the following for loop if you are looking to match corresponding characters from each word
    //for(i = 0; i < strlen(wordA); i++) {
    //  if(wordA[i]!=wordB[i]) {
    //    count++;
    //  }
    //}
    //use the following for loop if you are looking to match any characters from word regardless of the order in which they appear
    for(i = 0; i < strlen(wordA); i++) {
      c[i]=0;
      for(j = 0; j < strlen(wordB); j++) {
        if(wordA[i]==wordB[j]) {
          c[i]++;
        }
      }
      if(c[i]==0) {
        count++;
      }
    }
    if (count == 1) {
        return 1;
    }
    return 0;
}

输出案例1:考虑单词顺序

  

输入2个相同长度的单词:

     

输入第一个单词:abcd

     

输入第二个单词:abcz

     

abcd

     

abcz

     

有1个字母的差异。

另一个输入

  

输入2个相同长度的单词:

     

输入第一个单词:qqqq

     

输入第二个单词:q

     

单词的长度不相等...再次输入!

     

输入2个相同长度的单词:

     

输入2个相同长度的单词:

     

输入第一个单词:qqqq

     

输入第二个单词:aaaa

     

qqqq

     

aaaa

     

没有一个字母差异。

案例2:不考虑字符顺序

  

输入2个相同长度的单词:

     

输入第一个单词:qwewew

     

输入第二个单词:ewwewf

     

qwewew

     

ewwewf

     

有1个字母的差异。

答案 1 :(得分:-2)

   #include<stdio.h>
   #include<string.h>
    int LetterDifference(char *wordA, char *wordB)
    {
        int count = 0 , i;
       for(i = 0 ;wordA[i] ; i++ )
       if(wordA[i]!=wordB[i])
           count++;
     return count;
  }
  int main()
  {
          char res = 0 ,word1[10],word2[10];
          printf("Enter the first word : ");scanf("%s",word1);
          printf("Enter the second word : ");scanf("%s",word2);

          res = LetterDifference( word1 , word2);
          if(res == 1)
          printf("Yes\n");
          else
          printf("No\n");
 }