有问题请教,
怎样用C编写函数将一个字符串中所有单词摘出来到一个新的二维数组中(字符串中有数字和字母)例如aaa111aa11a1变换之后是三个字符串aaa,aa,a
/*
给定一行文本,拆分成单词。
主要用到三个 string.h 中的库函数
1. strncpy(s, ct, n); 把字符从 cn 复制到 s 中,最多复制 n 个字符;
2. strpbrk(cs, ct) 在字符串 cs 中搜索任何属于 ct 的字符,并返回第一个位置指针,搜索不到则返回 NULL
3. strspn(cs, ct) 返回cs中由 ct 里的字符构成的子字符串的长度
*/
#include <stdio.h>
#include <string.h>
#define N 100
// 要拆分的字符串
char buf[N] = "aaa111aa11a1";
// 设置单词包含的字符
const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char res[N][N]; // 保存结果
int main()
{
if (buf == NULL){
printf("空指针\n");
return 1;
}
printf("原字符串是:%s:\n", buf);
char *p=buf; // p 定位尚未搜索的字符
int len = 0; // 辅助搜索
int word_cnt = 0; // 有多少个单词
// 搜索
while (p=strpbrk(p, letters)){
len = strspn(p, letters);
strncpy(res[word_cnt++], p, len); // res 是全局变量,默认初始化为全零。所以复制后不用补尾零。
p+=len;
}
// 输出结果
if (word_cnt > 0){
printf("拆分出 %d 个单词: ", word_cnt);
for (int i = 0; i<word_cnt; i++){
printf("%s, ", res[i]);
}
printf("\n");
}else{
printf("没有发现单词\n");
}
return 0;
}