我在一个char *变量中有一些值,例如:
result= TestLinkAPIResults.TEST_PASSED; remove = TestLinkAPIResults.TEST_PASSED
它们被空白区分开。
我正在尝试从char *中检索最后一组值,例如789和445,但我不太清楚如何执行此操作。
我目前正在这样做:
char* a1 = "1234 4567 789";
char* a2 = "123 445";
这只会让我知道第二组值,如果有超过2个输入则不起作用。
是否有一个很好的方法来提取最终的价值集,无论是否有1个或3个输入?
答案 0 :(得分:2)
您可以手动编写相应的功能。例如
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char * extract( const char *s, size_t n )
{
if ( n == 0 ) return NULL;
while ( n != 0 && isspace( ( unsigned char )s[n-1] ) ) --n;
while ( n != 0 && isdigit( ( unsigned char )s[n-1] ) ) --n;
return ( char * )( isdigit( ( unsigned char )s[n] ) ? &s[n] : NULL );
}
int main( void )
{
char *s1 = "1234 4567 789";
char *s2 = "123 445";
char *p1 = extract( s1, strlen( s1 ) );
while ( p1 )
{
printf( "%d ", atoi( p1 ) );
p1 = extract( s1, p1 - s1 );
}
printf( "\n" );
p1 = extract( s2, strlen( s2 ) );
while ( p1 )
{
printf( "%d ", atoi( p1 ) );
p1 = extract( s2, p1 - s2 );
}
printf( "\n" );
}
程序输出
789 4567 1234
445 123
考虑到您可能不会将标准函数strtok
应用于字符串文字,因为在此处的某些答案中建议使用。:)
答案 1 :(得分:0)
您可以使用strtok
,它会根据模式(在这种情况下为空格)分割字符串
char *a1 = "1234 4567 789";
char *ptr;
char *tmp = strtok(a1, " ");
while(tmp != NULL)
{
ptr = tmp;
tmp = strtok(NULL, " ");
}
//ptr holds now the last value
答案 2 :(得分:0)
您可以使用strrchr
返回指向最后一次出现的指针。
#include <stdio.h>
#include <string.h>
int main (void) {
char *s = "1234 4567 789";
char *s2 = strrchr(s, ' ');
if (s2 != NULL)
printf("%s\n", s2 + 1);
return 0;
}
答案 3 :(得分:0)
使用strchr(),您可以跟踪最后一次出现的空格,如下所示:
#include <stdio.h>
#include <string.h>
int main (void) {
char *str = "1234 4567 789";
char *pch;
int last_idx = 0;
pch = strchr(str, ' ');
while (pch != NULL) {
last_idx = pch-str+1;
pch = strchr(pch+1,' ');
}
printf("%s\n", str + last_idx);
return 0;
}
输出:
789
或者,您可以使用strtok()(但不能使用字符串文字),如下所示:
#include <stdio.h>
#include <string.h>
int main (void) {
char str[] = "1234 4567 789";
char *pch, *last_pch = str;
pch = strtok (str, " ");
while (pch != NULL) {
last_pch = pch;
pch = strtok (NULL, " ");
}
printf ("%s\n", last_pch);
return 0;
}
输出:
789
这里我们实际上记得最后一个pch
实际上是一个子字符串令牌而我们并不关心令牌的数量。