C不會讓這個簡單。我看了一眼,什麼都沒發現。在c中搜索一個字符串的子字符串,然後創建一個新的字符串
我需要在C字符串中搜索以「Sample:」開頭的子字符串,然後創建一個新的C字符串,該字符串包含之後的所有字符,直到第一個換行符爲止。
在C++中,我可以在心跳中做到這一點。一個更有經驗的C程序員可以告訴我方式嗎?
我敢肯定,我可以通過手工寫出來做到這一點,但肯定有一些內置的功能可以幫助嗎?
C不會讓這個簡單。我看了一眼,什麼都沒發現。在c中搜索一個字符串的子字符串,然後創建一個新的字符串
我需要在C字符串中搜索以「Sample:」開頭的子字符串,然後創建一個新的C字符串,該字符串包含之後的所有字符,直到第一個換行符爲止。
在C++中,我可以在心跳中做到這一點。一個更有經驗的C程序員可以告訴我方式嗎?
我敢肯定,我可以通過手工寫出來做到這一點,但肯定有一些內置的功能可以幫助嗎?
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調用。
我沒意識到你可以減去char * s。棒極了。這是我一直在尋找的東西。謝謝。 – Aerovistae 2012-03-14 21:15:50
@Aeroovistae它與字符串如何作爲連續的內存塊存儲在內存中有關。所以,如果我有一個指向內存索引的指針,那麼指針和內存塊開始之間的區別就是子串的長度。 – 2012-03-14 21:18:05
是的,非常有意義。再次感謝。 – Aerovistae 2012-03-14 21:18:31
查找strstr(),也許strchr()BTW:我可以建議你徹底研究std libray中的函數。沒有很多功能,但是當你需要它們時,你可能會記住它們的名字。 – wildplasser 2012-03-14 21:08:41
我爲什麼得到-1?出於好奇...似乎對我來說是一個合法的問題 – Aerovistae 2012-03-14 21:09:25
可能是因爲你抱怨並沒有表現出什麼努力。 – wildplasser 2012-03-14 21:10:25