|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
char *p = str;
char *pos[MAX];
char ch;
int len = 0;
int cchar = 0, cword = 0;
int max = 0,i = 0, j;
printf("请输入一个英文句子:");
while ((str[len++] = getchar()) != '\n' && len < 1024)
;
len -= 2;
printf("请输入分割符:");
scanf("%c",&ch);
if (*p != ch)
{
cword++;
cchar++;
pos[i++] = p;
len--;
p++;//放在里面,只有第一个指针用过了才指向下一个
}
while (len--)
{
if (*p++ == ch)
{
max = cchar > max ? cchar : max;
cchar = 0;
if (*p != ch)
{
cword++;
pos[i++] = p;
}
}
else
{
cchar++;
}
}
max = cchar > max ? cchar : max;
char result[cword][max+1];
for (i = 0;i < cword;i++)
{
for (j = 0;*(pos[i]+j) != ch;j++)
{
result[i][j] = *(pos[i]+j);
}
result[i][j] = '\0';
}
printf("分割结果已存放到result[%d][%d]的二维数组中...",cword,max+1);
printf("现在依次打印每个单词:\n");
for (i = 0;i < cword;i++)
{
printf("%s\n",result[i]);
}
return 0;
}
请输入一个英文句子:23@23423@234
请输入分割符:@
--------------------------------
Process exited after 17.33 seconds with return value 3221225477
请按任意键继续. . .
好像出现问题了,是代码错了?
本帖最后由 jackz007 于 2020-3-11 22:56 编辑
采用二维字符数组来保存分割好的字符串有个问题,二维数组的每一行都是等长的,要求这个行长度必须能够容纳被分割出来最长的字符串,所以,这个长度很重要。但是,我们事先并不知道这个长度的合适值,如果设置小了肯定会导致下标越界,如果设置长了,会非常浪费存储空间。
在这里,我们不考虑把分割好的字符串存入另一个二维字符数组,而是采用字符指针数组记录每个字符串在 str[] 中的开头,然后,把分隔符直接改成字符串结束符 '\0',这样,只要通过指针数组,就可以访问到每一个被分割出来的字符串。
- #include<stdio.h>
- #define MAX 1024
- int main()
- {
- char c , str[MAX] , * pos[MAX] ;
- int d , e , k , m ;
- printf("请输入一个英文句子:") ;
- for(m = 0 ; (c = getchar()) != '\n' && m < MAX ; str[m ++] = c , str[m] = '\0') ;
- printf("请输入分割符:") ;
- c = getchar() ;
- for(d = 0 , e = 0 , k = 0 ; k < m ; k ++) {
- if(str[k] == c) {
- str[k] = '\0' ;
- e = 0 ;
- } else {
- if(! e) pos[d ++] = & str[k] ;
- e ++ ;
- }
- }
- printf("现在依次打印每个单词:\n") ;
- for(k = 0 ; k < d ; k ++) printf("%s\n" , pos[k]) ;
- }
复制代码
编译、运行实况:
- C:\Bin>g++ -o x x.c
- C:\Bin>x
- 请输入一个英文句子:23@23423@234@
- 请输入分割符:@
- 现在依次打印每个单词:
- 23
- 23423
- 234
- C:\Bin>x
- 请输入一个英文句子:@23@@23423@@@234@@5
- 请输入分割符:@
- 现在依次打印每个单词:
- 23
- 23423
- 234
- 5
- C:\Bin>
复制代码
|
|