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

[新手问题]请问这个字符串的程序有什么错误?

naski 发布于 2007-12-10 10:17, 1111 次点击
--------------------------------------------------------------------------------------------------------
问题:将主函数中给出的字符串中的大写字母替换为小写字母。
--------------------------------------------------------------------------------------------------------
源代码:
#include<iostream>
using namespace std;
void my_strlwr(char *s);    //定义一个将字符串中的大写字母替换为小写字母的函数
int main()
{
   char *str="Hello,The World!";
   my_strlwr(str);
   return 0;
}
void my_strlwr(char *s)
{
    char *sh;
    sh=s;                   //定义一个指针指向字符串的串头字符
    while(*s!='\0')
    {
    if(*s>='A'&&*s<='Z');
    *s=*s-32;               //疑问:这样大小写转化可以吗?      
     s++;    
    }
   cout<<sh<<endl;
}
--------------------------------------------------------------------------------------------------------
请大家指点,我找不到问题所在,先谢谢了。
4 回复
#2
wuyu5202008-01-29 16:30
1;你的IF后面的;除掉
2;*S = *S + 32;
3;char *str="Hello,The World!";和char str[]="Hello,The World!";的区别;
char *str="Hello,The World!";是不常量不能改变;
#3
eagleboycn2008-01-29 16:54
2楼正解!(第三条有疑问?)
在<cctype>里面有tolower,toupper函数啊,直接转换大小写,还有检测大小写的bool函数
楼主:
你定义一个sh=s;
那你还用*s干吗?
#4
SNAKEQX2008-02-02 15:33
关于第三点,请详细解释其区别.我到现在都没弄懂.谢谢.我是菜鸟,请大家多多指教.
#5
天使梦魔2008-02-02 19:08
往指针里写值,很有才........
指针不分配空间,你可以用

string str="Hello,The World!";
void my_strlwr(string *s) //用指针来取值
{
  cout<<*s;
}
my_strlwr(&str);//引用取得str的地址
---------------------------------------------
最简单的说明:
如果函数的参数是一般变量,那函数使用的时候会再次声请一个string的空间.
如果函数的参数是指针,那函数处理str的时候直接在str的空间里处理数据.

cout<<&str;//你可以看到这个变量在内存中的地址.
上面的函数相当于string *s=&str;
在处理*s的时候相当于直接处理str.

如果参数是一般变量,就相当于string s=str;
在处理的时候先把str的内容复制给s,然后进行运算.

如果还看不懂,先跳过这一节吧.
1