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

自学c++,这段程序中有句话看不懂

zr1234561555 发布于 2009-07-22 10:37, 934 次点击
将大写字母转为小写字母,大写字母不变,我有句话看不懂,见注释
#include <iostream.h>
#define N 100
void main()
{
    char str1[N],str2[N];
    int i=0;
    cout<<"input a string";
    cin>>str1;
    while (str1[i]!='\0')
    {
        if (str1[i]>='a'&&str1[i]<='z')
            str2[i]=str1[i]-'a'+'A';
        else
            str2[i]=str1[i];
        i++;
    }
    str2[i]='\0';  /******* 为什么不放在循环里面,删掉貌似没影响,这句话是干什么的
    cout<<"str1="<<str1<<endl;
    cout<<"str2="<<str2<<endl;
}
10 回复
#2
davidlv4192009-07-22 11:04
回复 楼主 zr1234561555
str2[i]='\0  //这就话的意思是:把字符串str2最后面加上一个结束标志 '\0';
没有这句话结果也不会有变化,不过这么做正规,不容易出其他的问题。
#3
zhangjun0390092009-07-22 11:05
数据分配的内存是连续存储的,如果不加那一句的话,就会把字符之后的那些非字符东东都输出,这些东东也就是内存的分配地址~'\0'是表示字符串结束!我的理解是这样的,应该是这样
#4
sydyh432009-07-22 14:00
字符串以‘\0’结尾。
#5
ET_bug2009-07-22 14:17
我也认为是结束符;但我不懂为什么str1没有这么做,而只是str2
#6
yu5890681yu2009-07-22 14:55
回复 5楼 ET_bug
好像在说str1中已经有\0了 但是str1中的无法传递给str2
#7
zr12345615552009-07-22 16:06
你们没回答最关键的问题啊,str2【i】他为什么不放在循环里面
#8
pkpokemon2009-07-23 09:29
如果那一句放在循环中的话,那岂不是str2的每一个元素都变成结束符了,这个程序中只要在str2的结尾加上结束符就可以了
#9
ET_bug2009-07-23 10:43
放在外面是因为要等循环结束,这时i的值就到达最大,也就是结尾了
然后在结尾的地方加上'\0'作为结束符
#10
zjy25102009-07-24 12:07
正解
#11
黯然神伤2009-07-25 19:54
cin>>str1之后,str1会以'\0'结束,当循环到最后一个字符时循环结束,此时str2最后并没有被赋上'\0'以作结束,所以要加上这句
1