[英]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(空字符)終止:
- 環境
5.2 環境考慮
5.2.1 字符集
2.
在字符常量或字符串文字中,執行字符集的成員應由源字符集的相應成員或由反斜杠 \\ 后跟一個或多個字符組成的轉義序列表示。 所有位都設置為 0 的字節,稱為空字符,應存在於基本執行字符集中; 它用於終止一個字符串。
還:
- 圖書館
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.