我想创建一个函数来使用C中的分隔符拆分文本。
两个参数text
和separator
将传递给函数,函数应返回array of chars
。
例如,如果字符串为Hello Word of C
且分隔符为white space
。
然后该函数应该返回,
0. Hello
1. Word
2. of
3. C
作为一组字符。
有什么建议吗?
答案 0 :(得分:4)
strtok不符合您的需求吗?
答案 1 :(得分:1)
正如其他人已经说过的那样:不要指望我们写下你的作业代码,但这里有一个提示: (如果你被允许修改输入字符串)想想这里发生了什么:
char *str = "Hello Word of C"; // Shouldn't that have been "World of C"???
str[5] = 0;
printf(str);
答案 2 :(得分:1)
嗯,和abelenky一样的解决方案,但没有无用的废话和混淆测试代码(当某些东西 - 比如printf - 应该写两次,我没有引入一个虚拟布尔来避免它,没有我读过的东西喜欢那个地方?)
#include<stdio.h>
char* SplitString(char* str, char sep)
{
return str;
}
main()
{
char* input = "Hello Word of C";
char *output, *temp;
char * field;
char sep = ' ';
int cnt = 1;
output = SplitString(input, sep);
field = output;
for(temp = field; *temp; ++temp){
if (*temp == sep){
printf("%d.) %.*s\n", cnt++, temp-field, field);
field = temp+1;
}
}
printf("%d.) %.*s\n", cnt++, temp-field, field);
}
在Linux下使用gcc进行测试:
1.) Hello
2.) Word
3.) of
4.) C
答案 3 :(得分:0)
我的解决方案(解决@kriss的评论)
char* SplitString(char* str, char sep)
{
char* ret = str;
for(ret = str; *str != '\0'; ++str)
{
if (*str == sep)
{
*str = '\001';
}
}
return ret;
}
void TestSplit(void)
{
char* input = _strdup("Hello Word of C");
char *output, *temp;
bool done = false;
output = SplitString(input, ' ');
int cnt = 1;
for( ; *output != '\0' && !done; )
{
for(temp = output; *temp > '\001'; ++temp) ;
if (*temp == '\000') done=true;
*temp = '\000';
printf("%d.) %s\n", cnt++, output);
output = ++temp;
}
}
在Visual Studio 2008下测试
输出:
1.) Hello
2.) Word
3.) of
4.) C
答案 4 :(得分:0)
我会推荐 strsep。它比 strtok 更容易理解,但它剖析现有字符串,使其成为标记序列。是否需要先复制由您决定。