拆分出句子的单词

欢迎大家指正: 

char** SplitWords(char* words, int *nrWords)
{
	int wordsLen;
	char* token;
	char* nextTokens;
	struct list_head link = LIST_HEAD_INIT(link);
	struct list_head* pos;
	struct Strings* ss, *entry;
	char** sa;
	int i = 0;

	if (!words || !nrWords) { 
		return NULL;
	}

	wordsLen = strlen(words);
	if (!wordsLen) {
		*nrWords = 0;
		return NULL;
	}

	*nrWords = 0;
	for (token = strtok_s(_strdup(words), ",. ", &nextTokens);
		token != NULL;
		token = strtok_s(NULL, ",. ", &nextTokens)) {
		ss = (struct Strings*)malloc(sizeof(struct Strings));
		if (ss) {
			ss->string = token;
			list_add_tail(&(ss->list), &link);
			(*nrWords)++;
		}
	}

	sa = (char**)malloc((*nrWords) * sizeof(char*));
	if (sa) {
		struct list_head *tmp;
		list_for_each(pos, &link) {
			entry = list_entry(pos, struct Strings, list);
			sa[i++] = entry->string;
			tmp = pos->prev; // 想让循环继续下去的话,需要先将本节点的prev节点暂存起来,执行list_del,然后再将prev节点恢复成当前节点
			list_del(pos);
			pos = tmp;
			free(entry);
		}
	}

	return sa;
}

namespace AlgorithmTest
{
	TEST_CLASS(AlgorithmTest)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
			char** ss = NULL;
			int n;

			ss = SplitWords("I love java.", &n);
			Assert::AreEqual(3, n);
			Assert::AreEqual("I", ss[0]);
			Assert::AreEqual("love", ss[1]);
			Assert::AreEqual("java", ss[2]);
		}

		TEST_METHOD(TestMethod2)
		{
			char** ss = NULL;
			int n;

			ss = SplitWords(NULL, &n);
			Assert::IsTrue(ss == NULL);
			ss = SplitWords("I love java", NULL);
			Assert::IsTrue(ss == NULL);

			ss = SplitWords("", &n);
			Assert::IsTrue(ss == NULL);
			Assert::AreEqual(0, n);
		}

	};
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值