我试图从使用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 "
),则该函数返回一个空字符串。