2012-03-14 210 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

相關問題