簡體   English   中英

如何比較兩個不同字符串中的每個字符?

[英]How do I compare each character in two different strings?

我想要做的是逐個字符地相互比較 2 個字符串。

示例 1:

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

輸出:你好

示例 2:

字符串 A:你好
弦B:Blowdy

輸出:owdy

在上面的示例中,即使字符串 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");
  }
}

我們初學者應該互相幫助。

任務並不像看起來那么簡單。

這個給你。

#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的當前計算值時max_common_length

至於你在問題中的代碼,很明顯它沒有意義。:)

字符串的結尾是 '\\0' 而不是 NULL,那么你的 printf 應該是 printf("%s\\n", strc) 否則你會在編譯時出錯。 如果你想檢查一個字符是否在一個句子中,那么你應該檢查你的第一個字母,將它與第二個字符串的所有字母進行比較,如果它在其中,把它放在某個地方,然后你去你的第一個字母的第二個字母字符串,然后對第一個字符串的所有字母執行此操作。 因為在您發布的此代碼中,這不是您要查找的內容。

在 C 中,字符串的結束字符是\\0 , Null 用於檢查指針是否已初始化。 你應該像這樣使用 printf: printf("%s\\n", strc); , '%s' 用於打印字符串。

如果它們在兩個字符串中的相同位置,您的方法只會提取相同的字母。 (我不太確定這是否是您想要的)如果您比較“Hello test”和“eHello test”,您的方法不會在這些字符串中找到相似的字符。 所以你可能不得不考慮另一種方法。

~~編輯~~

字符串使用 \\0(空字符)終止:

  1. 環境

5.2 環境考慮

5.2.1 字符集

2.

在字符常量或字符串文字中,執行字符集的成員應由源字符集的相應成員或由反斜杠 \\ 后跟一個或多個字符組成的轉義序列表示。 所有位都設置為 0 的字節,稱為空字符,應存在於基本執行字符集中; 它用於終止一個字符串。

還:

  1. 圖書館

7.1 簡介

7.1.1 術語定義

1 Astring 是由第一個空字符終止並包括第一個空字符的連續字符序列。 [...]

來源:

C 中字符串的結尾是 '\\0' 不是 NULL,NULL 用於指針,這意味着您可以在字符串(如 stra 的 char * )上使用它,但不能在字符(如 stra[i] )上使用它. 最后對於 printf 你應該使用: printf("%s\\n", strc);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM