字典序分割字符串 动态规划问题

对于输入字符串:

使用cin

cin适用于输入不包含空格的字符串。

#include <iostream>
using namespace std;

int main() {
    char str[1001]; // 字符数组大小为1001,留一个位置给'\0'
    cin >> str;
    cout << "You entered: " << str << endl;
    return 0;
}

cin从输入流中读取字符,直到遇到空格、制表符、换行符或文件结束符为止
遇到这些分隔符时,cin会停止读取,并将已读取的字符存储在目标变量中。
空格、制表符和换行符本身不会存储在目标变量中。

使用getline

getline可以读取包含空格的整行字符串。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    getline(cin, str); // 从标准输入读取一行
    return 0;
}

使用字符数组和cin.get

这种方法也适用于包含空格的字符串

#include <iostream>
using namespace std;

int main() {
    char str[1001]; // 字符数组大小为1001,留一个位置给'\0'
    cin.get(str, 1001); // 读取最多1000个字符
    cout << "You entered: " << str << endl;
    return 0;
}

使用cin.read(处理二进制输入)

如果需要处理可能包含换行符或其他特殊字符的二进制数据,可以使用cin.read。

#include <iostream>
using namespace std;

int main() {
    char str[1001]; // 字符数组大小为1001,留一个位置给'\0'
    cin.read(str, 1000); // 读取最多1000个字符
    str[cin.gcount()] = '\0'; // 手动添加字符串结束符
    cout << "You entered: " << str << endl;
    return 0;
}

最优子结构

关于问题的解决想法:

这里是数字,我查到有把字符串划分为字典序字符串的题,但不是数字形式,而是字母形式。

substr函数

定义
substr()是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。

语法
substr(size_type _Off = 0,size_type _Count = npos)-->第一个参数:offset 第二个参数:所取字符串长度。
一种构造string的方法
形式 : s.substr(pos, len)
返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
异常 :若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
例子:

erase函数

string& erase ( size_t pos = 0, size_t n = npos );

erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符

动态规划

总是列出状态转移方程,进行动态规划求解。

posted @   Y星人-很  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示