在c语言中提取字符串(子字符串)的某一部分



我试图从使用c语言存储为字符数组的字符串中提取商店的名称。每个字符串包含一个项目的价格和它所在的商店。我有许多遵循这种格式的字符串,但我在下面提供了几个示例:

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] = '';
// word now contains "remain"
}

正如在注释中已经指出的那样,您可以使用标准函数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 = '';
}
}

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动态创建一个字符数组,其中存储提取的名称。如果内存分配失败,该函数返回空指针。如果没有找到名称前的前缀(在本例中是字符串"at "),则该函数返回一个空字符串。

相关内容

  • 没有找到相关文章

最新更新