c语言 指针数组初步,编程题

问题描述:一个长度不超过10000的字符串,字符串中只含字母和空格,空格用于分隔单词.请将字符串中用空格分隔的单词输出来。
要求:1.利用指针数组保存每个单词的开始位置。
2.吧字符串中单词结束后的空格改为'\0’,然后用指针数组将每个单词输出
3.不可直接输出或用二维数组输出单词
这应该是比较简单的程序,求大神不要把它复杂化,求思路简介清晰,各种复杂的语句实在看不懂,再次说。。c语言c语言!不是c++等等东西。。

#include <stdio.h>
void split(char *str, char **a);
int main()
{
char in[10000]={0};
char *a[10000]={NULL};
int i=0;
printf("Please input a string:\n");
//输入字符串
gets(in);
//处理
split(in, a);
//输出单词
printf("Words:\n");
for(;a[i];i++) printf("%s\n", a[i]);
}
void split(char *str, char **a)
{
char *p=str;
//处理第一个单词
if(*p && *p!=' ') {*a++=str;p++;}
while(*p)
{
//处理单词
if(*p!=' ' && *(p-1)=='\0') *a++ = p;
//处理空格
else if(*p==' ') *p='\0';
p++;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-21
#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main(void)
{
char str1[N],*pstr=str1;
fgets(str1,N,stdin);
char *a[N];
int n=0;
int ischanged=0;
while(*pstr!='\n')
{
if(*pstr!=' '&&!ischanged)
{
a[n++]=pstr;
ischanged=1;
}else if(*pstr==' ')
{
*pstr='\0';
ischanged=0;
}
++pstr;
}
int i;
for(i=0;i<n;++i)
printf("%s\n",a[i]);
return 0;
}追问

运行不了啊。。。

追答

我的成功

追问

小实验.obj - 1 error(s), 0 warning(s)

第2个回答  2012-12-21
#include<stdio.h>
void GetWord(char* str)
{
char* pWord[10000];
int nNum = 0, i;
bool bSet = true;
for(; *str != '\0'; ++str)
{
if (*str == ' ')
{
*str = '\0';
bSet = true;
}
else if (bSet)
{
pWord[nNum++] = str;
bSet = false;
}
}
for (i = 0; i < nNum; i++)
{
printf("%s\n", pWord[i]);
}
}

void main()
{
char sz[] = " rtrt frerfg e wef4t4t dfgdfgdfg sdfs ef";

GetWord(sz);

}追问

= =vc++6.0运行不了而且这个char sz[] = " rtrt frerfg e wef4t4t dfgdfgdfg sdfs ef";是什么啊。。真心看不懂

追答

定义一个字符串啊,我试了能运行啊,你那什么错?

追问

很多error很多warning。。。我复制过去的,而且我真心没学个那么复杂的一串那种定义

追答

题目不是“一个长度不超过10000的字符串,字符串中只含字母和空格”吗?我就是随便定义了一个这样的字符串来测试那个函数对不对啊,那一串只是我随便打的,字符串本身的内容没特别意义,你也可以定义char* pStr = "124"; GetWord(pStr)这样理解了吧?

你把error贴出来看看。另外你粘贴到vc6编辑器里有时可能会多了些特殊字符,再不行你就手动打进去。

第3个回答  2012-12-21
void splitWords(char strSrc[], size_t len)
{
size_t i;
char **ppWords = (char **)malloc(len/2*sizeof(char *));
char **ppWord = ppWords;
memset(ppWords, 0, len/2);
*ppWord = strSrc;
for (i = 0; i < len; i++)
{
if (' ' == strSrc[i])
{
strSrc[i] = '\0';
if (i < len - 1)
{
*(++ppWord) = strSrc + i + 1;
}
}
}
for (i = 0; ppWords+i <= ppWord ; i++)
{
if (strlen(ppWords[i]) > 0)
{
printf("%s\n", ppWords[i]);
}
}
free(ppWords);
}