【问题标题】:how to compare some part of a string in c?如何比较c中字符串的某些部分?
【发布时间】:2023-03-09 20:22:02
【问题描述】:

我有一个关于只比较字符串的一部分的问题

例如:

char *string = "nameOfPeople_Allen";

char searchName[20] = "Allen";

如何从_修剪char *string = "nameOfPeople_Allen";得到名称Allen,然后与searchName比较,我知道如何比较字符串,但是如何从"nameOfPeople_Allen"的最后一部分_?

【问题讨论】:

  • 搜索'_' 字符,strchr()。

标签: c string compare


【解决方案1】:

只需使用strchr()

char *pointer;
if ((pointer = strchr(string, '_')) != NULL)
 {
    printf("The text after _ is %s\n", pointer + 1);
 }

【讨论】:

    【解决方案2】:

    使用strstr 标准库函数。

    char *temp = strstr(string, "Allen"); 
    

    然后使用strcmp 与searchName 进行比较。

    要查找- 之后的子字符串,请使用strchr

    char *temp = strchr(string, '_');   
    if(temp)  
        printf("%s\n", temp+1);
    

    【讨论】:

    • 如果 char *string = "nameOfPeople_Allen"; is char *string = "nameOfPeople_AllenAllen";,貌似没有同名
    • @ratzip;阅读strstr。
    • 来自 OP 我知道如何比较字符串,但是如何从 _ 中获取“nameOfPeople_Allen”的最后一部分。您的代码不能帮助他从 _ 中获取“nameOfPeople_Allen”的最后一部分,但会发现字符串 "Allen" 没有回答问题。
    • @Hynek-Pichi-Vychodil;好的。完成。
    【解决方案3】:

    简单快捷的方法:

    // static inline if you are interested
    int sameName(const char *string, const char *searchName) {
        const char *p;
        return (p = strchr(string, '_')) && strcmp(p+1, searchName) == 0;
    }
    

    【讨论】:

    • 你是怎么断定它是一种快速的方法?
    • strchr() 和strcmp() 都是非常简单的O(n) 函数。如果我理解代码正确,函数strstr() 似乎是O(n*m)。 O(n+m) 可以使用一些高级算法来完成它,但它似乎没有在标准库中使用。
    【解决方案4】:

    至于修剪,无论你做什么,不要修改string,因为它是在只读内存中分配的。 (您可以在这里使用const char* string 帮助自己)

    但是你可以使用strstr来检查收容:

    if (strstr(string, "Allen"))...
    

    【讨论】:

    • 你能解释一下为什么它被分配在r-o内存中,它是什么?
    • 因为它是一个字符串文字,而 C 就是这样工作的。尝试修改字符串是未定义的行为。
    【解决方案5】:

    如果您出于某种原因想循环遍历它,请尝试以下操作:

    int i, check = 0, position = 0;
    char part_of_string[20];
    for(i = 0; i < strlen(string); i++){
        if(check){ 
             part_of_string[position] = string[i];
             position++;
        }else if(string[i] == '_'){
             check = 1;
        }
    }
    

    现在part_of_string 包含“_”字符后的字符。您可以将其与strcmp() 进行比较或再次循环以检查“Alan”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2013-08-10
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多