注册 登录
编程论坛 C++教室

小小字符串函数!

晨曦的朝阳 发布于 2008-07-18 17:16, 850 次点击
编写一个函数,接受一个有大写和小写字母的串,返回这个串的全部是小写字母的备份,我写了下面这个
#include <iostream>
#include <string>
#include <stdlib>
using namespace std;
void Upper_Print( char *str1,char *str2)
{
     int i=-1,j=0;
     while(str1[++i]!='\0')
     if(isupper(str1[i]))
            str2[j++]=str1[i];
     str2[j]='\0';
}
int main()
{
    char * pt1=NULL,*pt2=NULL;
    char str_array1[20],str_array2[20];
    pt1=str_array1;
    pt2=str_array2;
    cout<<"input the str: ";
    cin>>str_array1;
    cout<<"the upper characters are : ";
    Upper_Print(pt1,pt2);
    cin.ignore(1);
    cout<<pt2;
    getchar();
    return 0;
}

感觉很莱,谁帮忙写个更好点的。
5 回复
#2
aipb20072008-07-18 23:19
没考虑安全问题
str2很可能是个空指针,那么程序崩溃
str2很可能size不够,那么程序崩溃

其实好的做法是,统计一次str1的小写字母个数后,再逐个copy。
#3
晨曦的朝阳2008-07-18 23:34
我只是随便写写,所以那个size定义得有些小,呵呵。(那个if(isupper(str1[i]))应该是if(islower...)
不过有一点楼上说的"str2很可能是个空指针,那么程序崩溃"好像不会哦,因为str2=pt2,而pt2已经定义为
*pt2=NULL了,所以好像程序崩溃不了哦。
还有你最后那个提议,的确可行,不过感觉没有那么简便,呵呵!还是谢谢版主!
#4
aipb20072008-07-18 23:38
回复 3# 晨曦的朝阳 的帖子
函数是写给别人用的不是自己用的,所以你的str2=pt2是别人的行为不是你的行为。
你如果给别人一个函数库,比如全是字符处理的函数库,难道你还得要求别人,这个函数用之前,必须给str2这个参数100的大小,否则会出错。那就太不友好了。

呵呵,早点有这种意识,总是好的。
#5
晨曦的朝阳2008-07-19 20:21
多谢楼主指点!呵呵!
#6
晨曦的朝阳2008-07-19 20:21
是版主哦,嘻嘻!
1