P5015 [NOIP2018 普及组] 标题统计
在怎么读取数据输入的问题上纠结了很久。
- 本来想用
cin>>x
的形式一个字符一个字符地读,但发现不知道什么时候停止读取。 - 改用
scanf("%s",&s)
,但发现不能读取中间有空格的字符串(会被认为是两个字符串)。 - 最终使用
cin.getline(str, len)
,直接读取一行。
通过代码
#include<iostream>
using namespace std;
int main()
{
int count=0;//标题中的字符数
int LEN=20;
char s[LEN]={
};
cin.getline(s, LEN);
for(int i=0;i<LEN;i++)if((s[i]!='\0')&&(s[i]!=' ')&&(s[i]!='\n'))
count++;
cout<<count;
return 0;
}
P5734 【深基6.例6】文字处理软件
在插入字符串部分反复出bug。
3 a str
:插入片段,在文档中第a个字符前面插入字符串str,并输出文档的字符串。
思路是先腾出空位然后,然后填进要插入的字符串没错。但我想要在一个循环中完成,腾一个就填一个。后来发现思路是混乱了的,需要移动的字符串与需要填入的字符串长度并不一致。
如原字符串为
abc
,操作为3 0 d
,我需要将三个字符各后移一位,但只需要填入一个字符d。
后来又遇到循环条件控制的问题,腾出空位时需要访问原字符串,我使用的代码如下。然而实际上随着字符串的后移,第一个\0
的位置其实是在变化的,已经不是原来的字符串结尾了。而且我居然忘记了我是使用了一个int e;
来指示字符串s
的尾部的。
for(int i=0;s[i]!='\0';i++)s[e-1-i+len]=s[e-1