C语言中数组的问题~在线等~急~!!!

输入一段以回车换行终止的英文语句,要求将句中的多余空格删掉(允许在单词之间有一个空格),然后将句中单词首字母全改成大写输出。要求:该英文语句保存进一维数组str中,删除多... 输入一段以回车换行终止的英文语句,要求将句中的多余空格删掉(允许在单词之间有一个空格),然后将句中单词首字母全改成大写输出。要求:该英文语句保存进一维数组str中,删除多余空格及大写首字母等操作均在同一个数组str内存中完成。

这个怎么编啊?我编的有 bug~
这是我的代码~如果没有耐心看,只需要给出原题的答案就行了~不用帮我纠正问题了
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
char str[500];
int i=0,j,c;
printf("请输入一串字符.注意不要超过500个字符,空白符计算在内(以回车终止输入操作)\n");
fgets(str,500,stdin);
printf("输入的字符串为\n%s",str);
while(str[i]==' ')
i++;
if(str[i]<='z'&&str[i]>='a')
str[i]-=32;
j=i;
i=0;
while(str[j]!=' ')
str[i++]=str[j++];
str[i]=' ';
while(str[j]!='\0')
{
i++;
for(;str[j]==' ';++j);
if(str[j]<='z'&&str[j]>='a')
str[j]-=32;
while(str[j]!=' '&&str[j]!='\0')
{
str[i++]=str[j];
str[j++]=' ';
}
}
printf("将多余的空格删除,并且将每个单词的首字母改成大写后的句子为:\n%s\n",str);
str[499]=getch();
}
展开
 我来答
帅得有点坏
2011-05-15 · TA获得超过1149个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:472万
展开全部
#include<stdio.h>
#include<string>

void move(char * s,int j,int n)//遇到空格就把后面的往前移一位。
{
if(j!=n-1&&*(s+j+1)>='a'&&*(s+j+1)<='z')
{
*(s+j+1)=*(s+j+1)-'a'+'A';//转换成大写。
}
for(int i=j;i<n-1;i++)
{
*(s+i)=*(s+i+1);
}
*(s+n-1)='\0';
}
int main()
{
char str[100];
gets(str);
int n=strlen(str);
for(int i=0;i<n;i++)
{
if(str[i]==' ')
move(str,i,n);
}
printf("%s",str);
}

上面那个代码不能处理两个连续的空格的字符串,

下面这个非常完美,很好,速度也很快,On级别的。

#include<stdio.h>
#include<string>

int count=0;
bool flag=false;

void move(char * s,int * d,int n)
{
for(int i=0;i<n;i++)
{
if(*(s+i)==' ')
flag=true;
if(flag&&*(d+i)==0&&*(s+i+1)>='a'&&*(s+i+1)<='z')
{
*(s+i+1)=*(s+i+1)-'a'+'A';//转换成大写。
}
*(s+i-*(d+i))=*(s+i);
}
*(s+n-count)='\0';
if(*s>='a'&&*s<='z')
{
*s=*s-'a'+'A';//转换成大写。
}
}

int main()
{
char str[100];
int data[100]={0};
gets(str);
int n=strlen(str);
for(int i=0;i<n;i++)
{
if(str[i]==' ')
{
count++;
data[i]=0;
}
else
data[i]=count;
}
move(str,data,n);
printf("%s",str);
}
sun_siliang
推荐于2016-01-15 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4468万
展开全部
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
char str[500];
int i=0,j,c,flag=1;
printf("请输入一串字符.注意不要超过500个字符,空白符计算在内(以回车终止输入操作)\n");
fgets(str,500,stdin);
printf("输入的字符串为\n%s",str);
for(i=0;str[i];i++)
{
if(str[i]==' '&&flag)
{
for(j=i;str[j];j++)
str[j]=str[j+1];
i--;
}
if(str[i]<='z'&&str[i]>='a'&&flag)
str[i]-=32;
if(str[i]==' ')
flag=1;
else
flag=0;
}
printf("将多余的空格删除,并且将每个单词的首字母改成大写后的句子为:\n%s\n",str);
str[499]=getch();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kantchf
2011-05-15
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
#define BEGIN 1 //"新单词"开始
#define END 0 //单词结束
main()
{
char str[40];
char c;
int i,j;
int word=END; //还未开始统计
printf("请输入一段以回车结束的英文语句\n");
gets(string);
for(i=0;(c=str[i])!='\0';i++)
{ if(word==END && c==' ') //有连续空格
for(j=i;str[j]!='\0';j++)str[j]=str[j+1];
else if(c==' ') word=END;
else if(word==END)//进入一个新单词
if(str[i]>='a'&& str[i]<='z')str[i]=str[i]-32;
}
puts(str);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式