我有一個格式爲<item1>:<item2>:<item3>
的字符串中的字符數組是什麼是最好的分解方式,以便我可以分別打印不同的項目?我應該循環訪問數組,還是有一些可以幫助的字符串函數?替換字符串中的字符C
3
A
回答
1
我會用sscanf
功能
char * str = "i1:i2:i3";
char a[10];
char b[10];
char c[10];
sscanf(str, "%s:%s:%s", a, b, c);
這是不安全的,因爲它很容易受到緩衝區溢出。在Windows中,有sscanf_s作爲安全破解。
1
您可以嘗試strtok: 這裏是一些示例代碼,以獲取被分隔的子字符串, - 或|
#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
char buf1[64]={'a', 'a', 'a', ',' , ',', 'b', 'b', 'b', '-', 'c','e', '|', 'a','b', };
/* Establish string and get the first token: */
char* token = strtok(buf1, ",-|");
while(token != NULL)
{
/* While there are tokens in "string" */
printf("%s ", token);
/* Get next token: */
token = strtok(NULL, ",-|");
}
return 0;
}
0
strtok
是最好的選擇,在這裏想補充兩兩件事:
1)strtok
修改/操縱原始的字符串,並剝離出來的分隔符,並
2)如果你有一個多線程程序,你可以使用strtok_r
這是線程安全/可重入版本。
0
只需遍歷字符串,每次點擊':'
時,打印自上次出現':'
以來已經讀取的任何內容。
#define DELIM ':'
char *start, *end;
start = end = buf1;
while (*end) {
switch (*end) {
case DELIM:
*end = '\0';
puts(start);
start = end+1;
*end = DELIM;
break;
case '\0':
puts(start);
goto cleanup;
break;
}
end++;
}
cleanup:
// ...and get rid of gotos ;)
相關問題
- 1. c中的字符串替換字符#
- 2. 字符串中的字符串替換
- 3. 替換字符串中的數字 - C#
- 4. c#字符串字符替換
- 5. 用字符串c中的unicode字符替換特殊字符#
- 6. 替換字符串字符
- 7. 在C#替換字符串
- 8. C# - 字符串替換
- 9. C#替換字符串
- 10. C#替換字符串
- 11. 字符串替換在C#
- 12. 字符串替換C#
- 13. Objective-C字符串替換
- 14. C#字符串替換
- 15. C#替換字符串「與」
- 16. 替換C#字符串/ V
- 17. 字符串替換C++
- 18. C#替換字符串
- 19. 矢量字符串字符替換字符串C++
- 20. 替換字符串中的字符Java
- 21. Java - 替換字符串中的字符
- 22. 替換字符串中的字符
- 23. Swift - 替換字符串中的字符
- 24. Java - 替換字符串中的字符
- 25. 替換字符串中的字符?
- 26. Postgres替換字符串中的字符
- 27. 替換字符串中的字符
- 28. 替換字符串中的字符
- 29. 替換字符串中的字符
- 30. 替換字符串中的字符
您將受益於閱讀任何初學者ç書,甚至K&R –
退房'的sscanf()'或'的strtok()'或做你的實現並不難.. – Jack