分隔单词
#include<stdio.h>#define MAX 1024
int main()
{
char str;
char *p = str;
char *pos;
char ch;
int len = 0;
int cchar = 0, cword = 0;
int max = 0,i = 0, j;
printf("请输入一个英文句子:");
while ((str = getchar()) != '\n' && len < 1024)
;
len -= 2;
printf("请输入分割符:");
scanf("%c",&ch);
if (*p != ch)
{
cword++;
cchar++;
pos = p;
len--;
p++;//放在里面,只有第一个指针用过了才指向下一个
}
while (len--)
{
if (*p++ == ch)
{
max = cchar > max ? cchar : max;
cchar = 0;
if (*p != ch)
{
cword++;
pos = p;
}
}
else
{
cchar++;
}
}
max = cchar > max ? cchar : max;
char result;
for (i = 0;i < cword;i++)
{
for (j = 0;*(pos+j) != ch;j++)
{
result = *(pos+j);
}
result = '\0';
}
printf("分割结果已存放到result[%d][%d]的二维数组中...",cword,max+1);
printf("现在依次打印每个单词:\n");
for (i = 0;i < cword;i++)
{
printf("%s\n",result);
}
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 , * pos ;
int d , e , k , m ;
printf("请输入一个英文句子:") ;
for(m = 0 ; (c = getchar()) != '\n' && m < MAX ; str = c , str = '\0') ;
printf("请输入分割符:") ;
c = getchar() ;
for(d = 0 , e = 0 , k = 0 ; k < m ; k ++) {
if(str == c) {
str = '\0' ;
e = 0 ;
} else {
if(! e) pos = & str ;
e ++ ;
}
}
printf("现在依次打印每个单词:\n") ;
for(k = 0 ; k < d ; k ++) printf("%s\n" , pos) ;
}
编译、运行实况:
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> 代码是怎么看怎么复杂。我改了下。
#include<stdio.h>
#define MAX 1024
int main()
{
char str={'\0'};
char ch;
int len = 0;
int m = 0, t, i, j;
printf("请输入一个英文句子:");
while ((str = getchar()) != '\n' && len < 1024);
str = '\0';
printf("请输入分割符:");
scanf("%c",&ch);
t = 0;
while(str!='\0')
{
if (str==ch)
m++;
t++;
}
char nStr;
t = 0;
i = 0;
j = 0;
while(str!='\0')
{
if (str==ch)
{
nStr = '\0';
i++;
j=0;
}
else
{
nStr = str;
j++;
}
t++;
}
nStr = '\0';
printf("分割结果已存放到result[%d][%d]的二维数组中...",m+1,MAX);
printf("现在依次打印每个单词:\n");
for (i = 0;i < m+1;i++)
{
printf("%s\n",nStr);
}
return 0;
}
页:
[1]