方法一:对于一个字符串,我们先遍历一遍,求出它的长度strlen 并且将它的空格都变为’\0’。先把字符串的首地址给指针数组,然后定义一个变量i 作为循环变量来重新遍历这个字符串,每一次碰到’\0’,就将str[i+1]赋值给指针数组;最后再输出指针数组就完成了。`
#include<stdio.h>
#include<string.h>
#define M 100
#define N 20
int main(int argc, const char *argv[])
{
char str[M]={0};
gets(str);
char *pstr[N]={0};
pstr[0]=str;
int len=strlen(str);
char *p=str;
while(*p)
{
if(*p==' ')
*p='\0';
p++;
}
int i=0,j=1;
while(i<len)
{
if(str[i]=='\0')
pstr[j++]=&str[i+1];
i++;
}
int k=0;
for(;k<j;k++)
{
printf("%s\n",pstr[k]);
}
return 0;
}
方法二:同样的,我们采用指针数组的方式存放隔断后的字符串。
这次,我们采用标志位的方式来作者道题。
#include<stdio.h>
#include<string.h>
#define M 100
#define N 20
int main(int argc, const char *argv[])
{
char str[M]={0};
printf("请输入你要隔断的字符串\n");
gets(str);
char *pstr[N]={0};
char *p=str;
int i=0;
int j=0;
int flag=1;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
{
str[i]='\0';
flag=1;
continue;
}
if(str[i]!='\0'&&flag==1)
{
pstr[j++]=&str[i];
flag=0;
}
}
int k=0;
printf("隔断后输出如下:\n");
for(;k<j;k++)
{
printf("%s\n",pstr[k]);
}
return 0;
}
如上代码所示:当我们在遇到空格的时候,设置该字符串的该位置为’\0’,并且置flag=1跳出该循环,当下一次进入如果碰到该字符串的下一个位置不是空格的时候,并且满足我们的标志位flag=1,他会将该位置的地址给我们的指针数组,然后把标志位置0,当下一次碰到字符之前都是0。最后跑完这个循环,把我们的指针数组打印输出就完成了这道题目。
以上运行在linux平台上,经验证都是正确的。