黑马程序员技术交流社区
标题:
关于首字母变大写的程序,大家看看问题出在哪
[打印本页]
作者:
3677065
时间:
2014-8-15 21:24
标题:
关于首字母变大写的程序,大家看看问题出在哪
#include<stdio.h>
void main()
{
char a[50];
int i;
scanf("%s",&a);
for(i=0;a[i]!='\0';i++)
{if(i=0)
a[0]-=32;
else if(a[i]=32)
a[i+1]-=32;
else a[i]=a[i];}
printf("%s",a);
}
作者:
Meniny
时间:
2014-8-15 21:28
本帖最后由 Meniny 于 2014-8-16 08:37 编辑
先说语法:
首先光说scanf的话,不应该用&a,应该直接写a,因为你的a是个数组然后,你可以用fgets来进行输入,你这样输入的话遇到空格就断开了,比如我输入hello there的话there就没了
还有,if里面是==而不是=,因为不是赋值
再说思路:
你这样的办法,没用考虑某个单词首字母本来就是大写的情况,比如我输入Dec就会输出$ec
我给你一个例子吧:
/*
6、 输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
*/
#include <stdio.h>
int main()
{
//提示输入英文句子
printf("请输入一段英文句子:\n");
//定义一个变量来接收
char sen[100];
//定义一个指针,指向数组首个元素
char *p = sen;
//输入句子
fgets(sen,99,stdin);
//第一个字母大写,当然你也可以用函数
*p -= 32;
//循环直到句子结束
while (*p != '\0')
{
//判断,如果当前的字符不是空格,则继续
if(*p != ' ')
{
p++;
}
//如果是空格,则定位到下一个字符,如果该字符是小写字母,则改为大写
else if (*p == ' ')
{
p++;
if (*p >= 97 && *p <= 122)
{
*p -= 32;
}
}
}
//输出修改后的句子
puts(sen);
return 0;
}
复制代码
作者:
寇亮
时间:
2014-8-16 08:33
分享一下我的代码
#include <stdio.h>
#define STRINGLENGTH 100
char upper(char c);
int main()
{
printf("请输入一英文句子:\n");
char str[STRINGLENGTH] ; gets(str);
//先对首字符执行upper操作
str[0] = upper(str[0]);
int i=0;
while(str[i])
{
//对空格后的字符执行upper操作,空格的ASCLL码为32
if(str[i] == 32)
{
str[i+1]=upper(str[i+1]);
}
i++;
}
printf("%s\n",str);
return 0;
}
char upper(char c)
{
if(c >= 'a' && c <= 'z')
{
//大写字母的ASCLL码比小写字母小32
return c-32;
}else { return c;}
}
复制代码
作者:
ixx__123
时间:
2014-8-16 23:28
都在调适代码啊
作者:
叮当
时间:
2014-9-4 20:34
过来学习学习
作者:
Rainyday
时间:
2014-9-4 23:16
首先 不应该是&a 这个是表示获得a的内存地址 以下是我写的 有说明 希望对你有帮助
#include <stdio.h>
int main()
{
//定义一个长度为100的字符数组
char x[100];
//定义整形变量i
int i;
//输入提示信息
printf("请输入英文句子\n");
//获得输入的英文句子
gets(x);
//先判断x[0]是否是小写
if(x[0]>'a'&&x[0]<'z')
{
//首位字母变大写 因为在ASCII码中小写字母比大写字母大32
x[0]=x[0]-32;
}
//做循环 x[i]不等于字符结束的时候
for (i=1;x[i]!='\0';i++)
{
//做判断,如果x[i-1]等于空格
if (x[i-1]==' ')
{
//在做判断x[i]是否是小写字母
if(x[i]>'a'&&x[i]<'z'){
//那么他的后一位减去32变大写
x[i]=x[i]-32;
}
}
}
//做循环 x[i]不等于字符结束的时候
for (i=0;x[i]!='\0';i++)
{
//输出改变之后的字符串
printf("%c",x[i]);
}
}
作者:
﹉随♥游✈者
时间:
2014-9-5 03:15
ke yu ta .............
作者:
zhuiyi007
时间:
2014-9-5 11:12
有众大神回复了,我就来学习学习吧
作者:
王绍明
时间:
2014-9-5 20:26
都是大神啊!!!!!!!!!!!
作者:
reinvent
时间:
2014-9-5 23:05
看了楼上的代码,大家都把首字母单拿出来做判断,其实也可以把它放在循环里,详见代码
#include <stdio.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//定义一个临时字符存储
char c;
//定义存储字符串的数组s
char s[100];
//定义一个循环变量
int i = 0;
//计算大小写ASCII码差值
int aA ='a' - 'A';
printf("请输入一个英文句子: ");
//循环接收输入的字符串
while((c = getchar()) != '\n')
s[i++] = c;
//给输入的字符串加上结束标示
s[i] = '\0';
//循环变量i清零
i = 0;
//循环遇到字符串结束标志'\0'结束
while( s[i] != '\0')
{
//如果前一个字符是空格或者是第一个字符,那么该字符是一个新单词的开始,并判断该字符是否为小写
if( (s[i-1]==' ' || i==0) && s[i] >= 'a' )
//减去大小写差值,变小写为大写
s[i] -= aA;
//循环变量自增1
i++;
}
//输出字符串
printf("%s\n", s);
}
return 0;
}
复制代码
作者:
浩润2015
时间:
2015-5-12 14:56
5、 输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
#include <stdio.h>
int main(int argc, const char * argv[])
{
char str[100]; //申明一个字符数组
int i=0;
int word=0;//标识是否为单词 0表示为单词,1表示不是单词
int count=0;//统计单词个数
printf("请输入一句英文:\n");
//从键盘输入英文单词
gets(str);
printf("当前输入的英文句子是:");
puts(str);
//循环遍历
while (str[i] != '\0') {
if(str[i] == ' '){
//设置为单词
word=0;
}else if (word == 0){
count++;
//将单词字母大写
str[i]=str[i]-32;
word=1;
}
i++;
}
printf("所有单词首字符转换成大写后输出后的英文句子是:");
puts(str);
return 0;
}
6、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)
#include<stdio.h>
int main(){
char str[100]="it is necessary for us all to make efforts to cultivate good manners";
int length=0;//定义计算单词长度计数器
int maxLength=0;//定义单词最大长度
int index=0;//定义单词最后一位字符的下标
int i=0;
//循环查找最大单词的多字母的下标
for(i=0;str[i] != '\0';i++){
if(str[i] !=' '){
length++;
if(length>maxLength){
index=i;
maxLength=length;
}
}else{
length=0;
}
}
printf("当前英文句子:\n%s\n",str);
printf("最长单词:\n");
//循环打出最长单词
for(i=maxLength;i != 0;i--){
printf("%c",str[index-i+1]);
}
printf("\n");
}
7、 输入两个数,打印(printf)这两个数的和、差、积、商、以及余数。(C语言编程题)
#include<stdio.h>
int main(){
int a=0,b=0;
int sum=0;//和
int cha=0;//差
int cj=0;//乘积
int shang=0;//商值
int ys=0;//余数
printf("请输入两个数并且以','号隔开:");
scanf("%d,%d",&a,&b);
// scanf("%d",&b);
sum=a+b;
cha=a-b;
cj=a*b;
if(b != 0){
shang=a/b;
ys=a%b;
}else{
printf("b不能为0\n");
}
printf("两数之和为%d\n",sum);
printf("两数之差为%d\n",cha);
printf("两数之积为%d\n",cj);
printf("两数之商为%d\n",shang);
printf("两数之余为%d\n",ys);
}
8、 编写一个int string_len(char *s),返回字符串s的字符长度(不包括\0) (C语言编程题)
#include<stdio.h>
//求字符串的长度
int string_len(char *s){
int length=0;
int i;
for(i=0;s[i] != '\0';i++){
length++;
}
return length;
}
int main(){
char str[100];
int len=0;
printf("请输入字符串\n");
gets(str);
len= string_len(str);
printf("字符串的字符长度是%d\n",len);
}
9、 从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。(C语言)
#include<stdio.h>
#include<string.h>
int main(){
int i=0,j=0;
char str[6][50];
for(i=0;i<6;i++){
printf("请输入第%d个字符串(仅仅包含英文字母和数字):",i+1);
scanf("%s",str[i]);
}
//比较字符串
for(i=0;i<6;i++){
for(j=0;j<5;j++){
if(strcmp(str[i],str[j])<0){
char tem[50];
strcpy(tem,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],tem);
}
}
}
printf("这6个字符串从小到大排列并输出结果:\n");
for(i=0;i<6;i++){
printf("第%d个字符串:%s\n",i+1,str[i]);
}
printf("\n");
}
10、 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
#include<stdio.h>
int sumOfDays(int y,int m,int d);
int main(){
int year,month,day;
do{
printf("请输入2006年1月1日以后的某一天:\n");
scanf("%d%*c%d%*c%d",&year,&month,&day);
}while(year<2006 || (month<1 || month>12) || (day<1 || day>31));
sumOfDays(year,month,day);
}
int sumOfDays(int y,int m,int d)
{
int i,j;
int sumDays=0;//总天数
int DaysOfYear=0;//年总天数
int DaysOfMonth=0;//月总天数
int leapYearMonths[12]={31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年的每月天数
int simpleYearMonths[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 平年每月天数
int xcYear=y-2006;//相差的年数
int xcMonth=m-1;
//求相差年总天数
for(i=0;i<xcYear;i++)
{
if((2006+i)%4==0 && (2006+i)%100 !=0)
{
DaysOfYear+=366;
}else if((2006+i)%400==0){
DaysOfYear+=366;
}else
{
DaysOfYear+=365;
}
}
//求相差月总天数
for(i=1;i<xcMonth;i++)
{
if(y%4==0 && y%100 !=0)
{
DaysOfMonth=leapYearMonths[i-1];
}else if(y%400==0)
{
DaysOfMonth=leapYearMonths[i-1];
}else
{
DaysOfMonth=simpleYearMonths[i-1];
}
}
//总天数
sumDays = DaysOfYear + DaysOfMonth + d;
//判断那天认识的人
if(sumDays %2 ==0){
printf("小明结识帅哥了\n");
}else if(sumDays %3 == 0){
printf("小明结识了美女\n");
}else{
printf("小明没有结识美女也没有结识帅哥\n");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2