一个很难的c语言题目 请个高手帮哈忙
输入一个字符串统计单词个数并把单词首字母变为小写其他的为大写如:aBcdefgH!变为:AbCdEFgh!...
输入一个字符串统计单词个数并把单词首字母变为小写其他的为大写 如:aB cd e fgH!变为:Ab Cd E Fgh!
展开
4个回答
展开全部
思路:
1.大小写字母转换好办:因为ascll码表中,大写字母和小写字母相差32,只要判断字母是大写字母或小写字母,加或减32就可以实现
2.判断单词个数麻烦些,一般是用空格的隔开判断单词个数,但是涉及到开头有空格,末尾有空格,或者有连续的空格。
使用了个标志变量,当字符为空格或不为空格的时候标志分别为0和1,这样,只有当满足“该字符为字母并且上一字符为空格”,才表示单词个数加1
#include <stdio.h>
int main(int argc, char* argv[])
{
char str[]="aB cd e fgH!";
int wordnum=0;
int flag=-1;//用于判断上1字符时空格,还是非空格
int i;
for (i=0;i<StrLen(str);i++)
{
if (str[i]!=' ' && flag!=1)//当前字符为字母,且上一字符为空格
{
flag=1;
wordnum+=1;
}
if (str[i]==' ')
{
flag=0;
}
if (str[i]>='a' && str[i]<='z')
{
str[i]=str[i]-32;
}
else if (str[i]>='A' && str[i]<='Z')
{
str[i]=str[i]+32;
}
}
printf("单词数量为:%d\n",wordnum);
printf("新字符串为:%s\n",str);
system("pause");
return 0;
}
1.大小写字母转换好办:因为ascll码表中,大写字母和小写字母相差32,只要判断字母是大写字母或小写字母,加或减32就可以实现
2.判断单词个数麻烦些,一般是用空格的隔开判断单词个数,但是涉及到开头有空格,末尾有空格,或者有连续的空格。
使用了个标志变量,当字符为空格或不为空格的时候标志分别为0和1,这样,只有当满足“该字符为字母并且上一字符为空格”,才表示单词个数加1
#include <stdio.h>
int main(int argc, char* argv[])
{
char str[]="aB cd e fgH!";
int wordnum=0;
int flag=-1;//用于判断上1字符时空格,还是非空格
int i;
for (i=0;i<StrLen(str);i++)
{
if (str[i]!=' ' && flag!=1)//当前字符为字母,且上一字符为空格
{
flag=1;
wordnum+=1;
}
if (str[i]==' ')
{
flag=0;
}
if (str[i]>='a' && str[i]<='z')
{
str[i]=str[i]-32;
}
else if (str[i]>='A' && str[i]<='Z')
{
str[i]=str[i]+32;
}
}
printf("单词数量为:%d\n",wordnum);
printf("新字符串为:%s\n",str);
system("pause");
return 0;
}
展开全部
到底是变成首字母大写还是首字母小写?你的描述和例子不一致
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
char *p, str[80];
int i = 1;
printf("请输入一句话:");
gets(str);
p=str;
if((*p>='a')&&(*p<='z'))
*p -= 32;
while(*++p)
if((*p>='a')&&(*p<='z')&&(*(p-1)==' '))
*p -= 32;
else if((*p>='A')&&(*p<='Z')&&(*(p-1)!=' '))
*p +=32;
p=str;
if(*p == ' ') i--;
while(*++p)
if((*p>='A')&&(*p<='Z')&&(*(p-1)==' '))//首字母已经变换为大写,不用考虑小写
i++;
printf("你一共输入了%d个单词\n这些单词变换后是:%s\n",i,str);
}
int main()
{
char *p, str[80];
int i = 1;
printf("请输入一句话:");
gets(str);
p=str;
if((*p>='a')&&(*p<='z'))
*p -= 32;
while(*++p)
if((*p>='a')&&(*p<='z')&&(*(p-1)==' '))
*p -= 32;
else if((*p>='A')&&(*p<='Z')&&(*(p-1)!=' '))
*p +=32;
p=str;
if(*p == ' ') i--;
while(*++p)
if((*p>='A')&&(*p<='Z')&&(*(p-1)==' '))//首字母已经变换为大写,不用考虑小写
i++;
printf("你一共输入了%d个单词\n这些单词变换后是:%s\n",i,str);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#define N 2000
void Change(char zifu[])
{
int a,count=0;
for(a=0;a<=N&&zifu[a]!='\0';a++)
{
count++;
if((zifu[a]>='A')&&(zifu[a]<='Z'))
zifu[a]=zifu[a]+32;
else
{
if((zifu[a]>='a')&&(zifu[a]<='z'))
zifu[a]=zifu[a]-32;
else
break;
}
}
printf("共有:%d个字符!\n",count);
}
void main()
{
char chuan[N];
gets(chuan);
Change(chuan);
puts(chuan);
}
#define N 2000
void Change(char zifu[])
{
int a,count=0;
for(a=0;a<=N&&zifu[a]!='\0';a++)
{
count++;
if((zifu[a]>='A')&&(zifu[a]<='Z'))
zifu[a]=zifu[a]+32;
else
{
if((zifu[a]>='a')&&(zifu[a]<='z'))
zifu[a]=zifu[a]-32;
else
break;
}
}
printf("共有:%d个字符!\n",count);
}
void main()
{
char chuan[N];
gets(chuan);
Change(chuan);
puts(chuan);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |