关于小写字符转大写字符的问题,请教指点!

动力风暴 2014-10-23 10:22:23

void uppers(const char *str,char *dest){
assert((str!=NULL)&&(dest!=NULL));
while(*str!='\0'){
if( (*str>='a') && (*str<='z') )
{
*dest=*str-32;
}
str++;
dest++;
}
*dest='\0';
}

void main(){
char *a="abcdefghijk";
//char *a="abcdef[]{}=-+ghijk";//为啥输入有a~z之外的其他字符时就有乱码??
char b[30];//字符串数组b必须必a要大。
uppers(a,b);
cout<<b<<endl;
}

为啥输入有a~z之外的其他字符时就有乱码???
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2014-10-23
  • 打赏
  • 举报
回复
自己实现库函数就行啦

#include <stdio.h>

int
my_isupper(char c)
{
    return (c >= 'A' && c <= 'Z');
}

int
my_islower(char c)
{
    return (c >= 'a' && c <= 'z');
}

int
my_toupper(char c)
{
    if (my_islower(c))
        return 'A' + (c - 'a');
    else
        return c;
}

int
my_tolower(char c)
{
    if (my_isupper(c))
        return 'a' + (c - 'A');
    else
        return c;
}

char *strupper(char *s)
{
    char *p;

    for (p = s; *p; ++p)
        *p = my_toupper(*p);
    return s;
}

char *strlower(char *s)
{
    char *p;

    for (p = s; *p; ++p)
        *p = my_tolower(*p);
    return s;
}

int
main(int argc, char *argv[])
{
    char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcd-1234";

    printf("%s\n", strupper(s));
    printf("%s\n", strlower(s));

    return 0;
}
动力风暴 2014-10-23
  • 打赏
  • 举报
回复
引用 1 楼 ouyh12345 的回复:
void uppers(const char *str,char *dest){ assert((str!=NULL)&&(dest!=NULL)); while(*str!='\0'){ *dest=*str; if( (*str>='a') && (*str<='z') ) { *dest=*str-32; } str++; dest++; } *dest='\0'; }
谢谢回复!对于不用处理的字符应该给赋值,我写程序的时候没考虑。
赵4老师 2014-10-23
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
动力风暴 2014-10-23
  • 打赏
  • 举报
回复
引用 2 楼 u013163178 的回复:
从语言标准库里面有这个函数,看我代码
/*************************************************************************
    > File Name: toupper.c
    > Author: Jukay
    > Mail: hellojukay@gmail.com 
    > Created Time: 2014年10月23日 星期四 10时33分57秒
 ************************************************************************/

#include<stdio.h>
#include<ctype.h>

int main()
{
	char s[] = "hello world!";
	printf("before toupper is: %s\n",s);
	for(int i=0; i< sizeof(s); i++)
		s[i] = toupper(s[i]);
	printf("after toupper is: %s\n",s);

	return 0;
}
详情可登陆www.gfsoso.com
这是一道笔试题:编写一个函数实现将字符串的小写字母转换为大写字母,不能调用C/C++库函数。 函数原型为void uppers(const char *src,char *dest) 其中src是输入字符串的地址,dest是输出字符串的地址。
li4c 2014-10-23
  • 打赏
  • 举报
回复
从语言标准库里面有这个函数,看我代码
/*************************************************************************
    > File Name: toupper.c
    > Author: Jukay
    > Mail: hellojukay@gmail.com 
    > Created Time: 2014年10月23日 星期四 10时33分57秒
 ************************************************************************/

#include<stdio.h>
#include<ctype.h>

int main()
{
	char s[] = "hello world!";
	printf("before toupper is: %s\n",s);
	for(int i=0; i< sizeof(s); i++)
		s[i] = toupper(s[i]);
	printf("after toupper is: %s\n",s);

	return 0;
}
详情可登陆www.gfsoso.com
ouyh12345 2014-10-23
  • 打赏
  • 举报
回复
void uppers(const char *str,char *dest){ assert((str!=NULL)&&(dest!=NULL)); while(*str!='\0'){ *dest=*str; if( (*str>='a') && (*str<='z') ) { *dest=*str-32; } str++; dest++; } *dest='\0'; }

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧