自学C Primer中,看书做题刚到第7章,然后练习题里有这样一个题目
要求输出一个句子,遇到”#”结束,然后把句子中的”.”(句号)替换为”!”(感叹号),把”!”(感叹号)替换为”!!”(感叹号X2),然后输出替换后的句子
要求输出一个句子,遇到”#”结束,然后把句子中的”.”(句号)替换为”!”(感叹号),把”!”(感叹号)替换为”!!”(感叹号X2),然后输出替换后的句子
#include<stdio.h>
#include<string.h>
const char Stop = "#";
const char Symbol_1 = ".";
const char Symbol_2 = "!";
const int MaxLen = 100;
int main(void)
{
char chs[MaxLen];
char Letter;
int Counts = 0;
int Times = 0;
printf("Please Input Words To Test:\n");
while((Letter = getchar()) != Stop)
{
if(Letter == Symbol_1)
{
chs[Counts] = Symbol_2;
++Counts;
++Times;
}
else
if(Letter == Symbol_2)
{
chs[Counts] = Symbol_2;
chs[Counts+1] = Symbol_2;
Counts += 2;
++Times;
}
else
{
chs[Counts] = Letter;
++Counts;
}
}
printf("%d Times\n",Times);
printf("%s\n",chs); //<--这个很奇葩
// int Len = strlen(chs); //<--问题出在这3行代码里
// for(int i = 0 ; i < Len+1 ; ++i)
// printf("%c ",chs[i]);
return 0;
}
本来本人写好代码(开始没加那3行代码),编译运行后出现一个问题,例如本人输入”qwqw..!!#qw”
然后替换次数为4次,这没问题,但最后用printf()显示替换后的字符串,正确的结果应该是qwqw!!!!!!
但在本人的系统(ubuntukylin14.04)里结果是
qwqw!!!!!!D
字符串后面莫名其妙的多了2个不知道是什么东东。
然后本人为了确认下这2个奇葩到底是什么,所以就在代码上加了那3行,本人本来想着一个一个的输出,看看最后2个字符到底是什么,
结果。编译完成后运行程序,本人发现程序好了。
这时候本人在输入”qwqw..!!#qw”
结果为
qwqw!!!!!!! <–最关键的是本人想知道为什么这行也正常了。
q w q w ! ! ! ! ! ! !
解决方案
20
字符串以\0结尾,假如找不到\0,就会一直去解析这个字符串,导致出现一些乱码