【问题标题】:How do I compare each character in two different strings?如何比较两个不同字符串中的每个字符?
【发布时间】:2019-07-24 10:53:43
【问题描述】:

我想做的是逐个字符地比较两个字符串。

示例 1:

字符串 A:你好
字符串 B:HelloWorld

输出:你好

示例 2:

字符串 A:你好
弦B:吹嘘

输出:老旧

在上面的例子中,即使字符串 A 比字符串 B 有更多的字符,反之亦然,而且它们都是不同的,我仍然希望在两个相同的字符串上输出字符。一旦正在比较的字符串之一达到空值,我还希望程序停止比较。

我已经想出了几行代码可能可以做到这一点,但我不太确定我是否朝着正确的方向前进。

int main(){
  char stra[100];
  char strb[100];
  char strc[100];

  for(int i = 0; stra[i] != Null && strb[i] != Null; i++){
    if(stra[i] == strb[i]){
        strc[i] = stra[i];
    }
  }

  if (strc != NULL){
    printf(strc);
  }else{
    printf("both words do not match");
  }
}

【问题讨论】:

  • I would still want to output the characters on both strings that are the same.-->这个输入呢? A: abcdgh and B: dcbaefgh 是否应该输出abcdh
  • 输出应该是 gh
  • 你怎么解释?
  • 您正在比较未初始化的字符串。 Null 是什么?
  • ABCDEFGXBXXDEFY 想要什么输出? BDEF?我认为您的规范不完整。

标签: c string char max string-comparison


【解决方案1】:

我们初学者应该互相帮助。

任务并不像看起来那么简单。

你来了。

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

void max_common_substring( const char *s1, const char *s2 )
{
    size_t max_common_length = 0;
    const char *max_start    = NULL;

    for ( ; *s1; ++s1 )
    {
        const char *p = strchr( s2, *s1 );
        if ( p != NULL )
        {
            size_t common_length = 0;
            for ( const char *q = s1; *q && *p && *q == *p; ++q, ++p )
            {
                ++common_length;                    
            }

            if ( max_common_length < common_length )
            {
                    max_common_length = common_length;
                    max_start = s1;
            }
        }
    }        

    if ( max_start != NULL )
    {
        printf( "%*.*s\n", ( int )max_common_length, ( int )max_common_length, max_start );
    }        
}

int main( void )
{
    const char *s1 = "Hello";
    const char *s2 = "HelloWorld";

    max_common_substring( s1, s2 );

    s1 = "Howdy";
    s2 = "Blowdy";

    max_common_substring( s1, s2 );
}

程序输出是

Hello
owdy

你可以优化循环

for ( ; *s1; ++s1 )

当字符串s1 中剩余的未处理字符已经小于max_common_length 的当前计算值时停止循环。

至于你在问题中的代码,那么很明显它没有意义。:)

【讨论】:

  • 我不确定他是否愿意。对我来说,他的规范不完整和/或不清楚。还是投了赞成票。
  • @Jabberwocky 在我看来,我已经正确理解了这个任务。:)
  • @Jabberwocky 另一种方法是返回动态分配的最大公共子字符串。但是在作业中写到应该只输出子字符串。:)
【解决方案2】:

字符串的结尾是 '\0' 而不是 NULL,那么你的 printf 应该是 printf("%s\n", strc) 否则编译时会出错。 如果你想检查一个字符是否在一个句子中,那么你应该检查你的第一个字母,将它与第二个字符串的所有字母进行比较,如果它在其中,将它存储在某个地方,然后你去你的第一个字母的第二个字母字符串,然后您为第一个字符串的所有字母执行此操作。因为在您发布的这段代码中,它不是您要查找的内容。

【讨论】:

    【解决方案3】:

    C 中字符串的结束字符是\0,Null 用于检查指针是否被初始化。您应该像这样使用 printf:printf("%s\n", strc);, '%s' 用于打印字符串。

    【讨论】:

      【解决方案4】:

      C 中字符串的结尾是 '\0' 不是 NULL,NULL 是指针,这意味着你可以在字符串上使用它(a char * like stra)但不能在字符上使用(比如 stra[一世] )。最后对于 printf 你应该使用: printf("%s\n", strc);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        • 2022-09-30
        相关资源
        最近更新 更多