2012-03-14 146 views
-1

C不会让这个简单。我看了一眼,什么都没发现。在c中搜索一个字符串的子字符串,然后创建一个新的字符串

我需要在C字符串中搜索以“Sample:”开头的子字符串,然后创建一个新的C字符串,该字符串包含之后的所有字符,直到第一个换行符为止。

在C++中,我可以在心跳中做到这一点。一个更有经验的C程序员可以告诉我方式吗?

我敢肯定,我可以通过手工写出来做到这一点,但肯定有一些内置的功能可以帮助吗?

+2

查找strstr(),也许strchr()BTW:我可以建议你彻底研究std libray中的函数。没有很多功能,但是当你需要它们时,你可能会记住它们的名字。 – wildplasser 2012-03-14 21:08:41

+0

我为什么得到-1?出于好奇...似乎对我来说是一个合法的问题 – Aerovistae 2012-03-14 21:09:25

+4

可能是因为你抱怨并没有表现出什么努力。 – wildplasser 2012-03-14 21:10:25

回答

3

strstr()strndup()是你的朋友,只记得释放输出,当你完成:

const char *input = "Hello Sample: This is a test\nTest"; 

const char *start = strstr(input, "Sample: "); 

if (!start) 
{ 
    // report error here 
} 

const char *end = strstr(start, "\n"); 
if (!end) 
{ 
    // you have two options here. 
    // #1: use pure strdup on start and you have your output 
    // #2: make this an error, and report it to the user. 
} 


int length = end - start; 

char *output = strndup(start, length); 

printf("%s", output); // Prints "Sample: This is a test" 

free(output); 

这不是太难,如果你知道正确的API调用。

+1

我没意识到你可以减去char * s。棒极了。这是我一直在寻找的东西。谢谢。 – Aerovistae 2012-03-14 21:15:50

+1

@Aeroovistae它与字符串如何作为连续的内存块存储在内存中有关。所以,如果我有一个指向内存索引的指针,那么指针和内存块开始之间的区别就是子串的长度。 – 2012-03-14 21:18:05

+0

是的,非常有意义。再次感谢。 – Aerovistae 2012-03-14 21:18:31

相关问题