交换字符串并检查 C 中的不相等条件?


#include <stdio.h>
#define MAX 100
void swap_string1(char *A, char *B);
int main (void) {
char S1[MAX]="ABC";   //tried these with different
char S2[MAX]="defgh"; //strings for S1 and S2
printf("S1: %snS2: %sn",S1,S2);
swap_string1(S1,S2);
printf("S1: %snS2: %sn",S1,S2);
swap_string1(S1,S2);
printf("S1: %snS2: %sn",S1,S2);
return 0;
}
void swap_string1(char *A, char *B) {
char temp, *tempP;
while ( *A != '' && *B != '' ) {
temp = *A;
*A = *B;
*B = temp;
A++ ; B++ ;
}
//strings unequal lengths, so finish-off the tail end
if ( *A == '' && *B !='' ) {
tempP=B;
while ( *B ) *A++=*B++;
*A='' ; *tempP='' ;
}
else if ( *A != '' && *B =='' ) {
tempP=A;
while ( *A ) *B++=*A++;
*B='' ; *tempP='' ;
}
}

这是我从笔记中获得的代码,它可以通过指针交换两个字符串,但我并没有真正了解如何检查长度不等的字符串的部分。

谁能向我解释这部分?

它非常简单:

*A 和 *B(指针引用的值(是指 A 和 B 在if ( *A == '' && *B !='' )if ( *A != '' && *B =='' )中的字符值,它们一直运行到它们各自的当前字符到达终止字符(也称为行尾或 eof,尤其是为什么要处理文件(。 由于存在"&&"运算符,这意味着循环中的内容会发生,直到具有较小数字的字符串(考虑到它们是不相等的(的字符达到 EOF 或"\0"。

如果字符串相等,那么它们将一起到达它们的终止字符,这是第一个 while 循环。

交换部分:(对于字符串不相等的 if 部分(

首先,按照您的代码,有一个临时指针tempP在进入 while 循环while(*B)以保存 B 的指向位置之前初始化为 B 的地址。我们分配它,因为我们需要使用 eof 字符再次收集 B 的值(在临时指针中执行(。(当你做*A++=*B++时,值会发生变化,因为它是一个引用的算术 - 类似于通过引用调用函数来更改传递参数的值(

现在,由于我们需要交换剩余部分(A 和 B 中字符数相等之后的字符(,我们将字符串 B 的值分配给 while*A++=*B++循环内的字符串 A('++' 以迭代值,在 A 和 B 中逐个字符遍历。对于指针算术,它将是整数的每个 +4 这样的内存地址,但它是我们在这里引用的值(,您可以注意到循环条件是while(*B)这与写入while(*B!='')相同,这意味着循环运行到 B 的最后一个字符(就在 eof 字符之前(。交换后,该 eof 字符不会触及或为字符串 A(现在使用字符串 B 值(就位,因此我们分配*A=''.类似地,要终止字符串 B,我们需要*B=''此处*tempP=''。(因为我们为 B 的地址分配了临时指针 tempP,而 B 值更改了*A++=*B++(

同样,对于其他部分,则相反。

    if ( *A == '' && *B !='' ) { //如果 B 更长
        tempP=B; //记住副本应该在哪里结束
        while ( *B ) *A++=*B++; //将 B 的其余部分复制到 A
        中*A='' ; *tempP='' ; //终止 A 和 B
    
    }else if ( *A != '' && *B =='' ) { //A 是否更长
        tempP=A; //记住副本应该在哪里结束
        while ( *A ) *B++=*A++; //将 A 的其余部分复制到 B
        中*B='' ; *tempP='' ; //终止 B 和 A
    }

  1. 要交换字符串,您可以简单地交换两个指针。

  2. 要确定两个字符串的相等性,您可以简单地使用#include <string.h>之后的内置函数strcmp(str1, str2).

最新更新