在C中提取字符串(子字符串)的特定部分

Extracting a Certain portion of a String (Substring) in C

我正在尝试从使用 C 语言存储为 char 数组的字符串中提取商店名称。每个字符串都包含商品的价格及其所在的商店。我有很多遵循这种格式的字符串,但我在下面提供了几个例子:

199 at Amazon
139 at L.L.Bean
379.99 at Best Buy
345 at Nordstrom

如何从这些字符串中提取商店名称? 提前谢谢你。

const char *sought = "at ";
char *pos = strstr(str, sought);
if(pos != NULL)
{
    pos += strlen(sought);
    // pos now points to the part of the string after "at";
}
else
{
    // sought was not find in str
}

如果您想提取 pos 之后的一部分,而不是整个剩余的字符串,您可以使用 memcpy:

const char *sought = "o "; 
char *str = "You have the right to remain silent";
char *pos = strstr(str, sought);

if(pos != NULL)
{
    char word[7];

    pos += strlen(sought); 
    memcpy(word, pos, 6);
    word[6] = '[=11=]';
    // word now contains "remain[=11=]"
}

正如评论中已经指出的那样,您可以使用标准函数 strstr

这是一个演示程序

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

char * extract_name( const char *record, const char *prefix )
{
    size_t n = 0;
    
    const char *pos = strstr( record, prefix );

    if ( pos )
    {
        pos += strlen( prefix );
        
        while ( isblank( ( unsigned char )*pos ) ) ++pos;
        
        n = strlen( pos );
    }
    
    char *name = malloc( n + 1 );
    
    if ( name )
    {
        if ( pos )
        {
            strcpy( name, pos );
        }
        else
        {
            *name = '[=10=]';
        }
    }
    
    return name;
}

int main(void) 
{
    const char *prefix = "at ";
    
    char *name = extract_name( "199 at Amazon", prefix );
    
    puts( name );
    
    free( name );
    
    name = extract_name( "139 at L.L.Bean", prefix );
    
    puts( name );
    
    free( name );
    
    name = extract_name( "379.99 at Best Buy", prefix );
    
    puts( name );
    
    free( name );
    
    name = extract_name( "345 at Nordstrom", prefix );
    
    puts( name );
    
    free( name );

    return 0;
}

程序输出为

Amazon
L.L.Bean
Best Buy
Nordstrom

函数extract_name 动态创建一个字符数组,用于存储提取的名称。如果内存分配失败,函数 returns 一个空指针。如果名称前的前缀(在本例中为字符串 "at ")未找到,则函数 returns 为空字符串。