【问题描述】
输入一行字符串,不要超过80个字符,含有数字和非数字字符以及空格等,如:
df23adfd56 2343?23dgjop535
如果将其中所有连续出现的数字视为一个整数,要求统计在该字符串中共有多少个整数,并将这些数依次输出。
【输入说明】
只有一行,含有数字和其它任意字符。该行最长含80个字符。
【输出说明】
第一行为字符串包含的整数个数,第二行依次为各个整数,各整数之间用一个空格分隔。在第二行末也要输出一个回车符。
【输入样例】
df23adfd56 2343?23dgjop535
【输出样例】
5 23 56 2343 23 535
【样例说明】
在字符串df23adfd56 2343?23dgjop535中有5个整数分别是
23 56 2343 23 535
#include <iostream>
#include <string> //引入字符串头文件,用于处理字符串相关的操作,如定义字符串变量、使用字符串函数等
#include <vector> //引入vector头文件,用于使用vector容器,它是C++标准库中提供的动态大小数组类型
using namespace std; // 使用标准命名空间,这样就可以直接使用std命名空间中的标识符,如cout、cin、string、vector等,而不需要每次都加上std::前缀
//函数声明,用于判断一个字符是否为数字字符,具体定义在代码后面
bool isN(char c);
int main()
{
string str; //定义一个字符串变量str,用于存储从控制台输入的字符串
int i; //定义一个整型变量i,主要用作循环变量
int start = 0; //定义一个整型变量start,用于记录连续数字字符序列在字符串中的起始位置
int number; //定义一个整型变量number,用于存储从字符串中提取并转换后的整数
//定义一个vector<int>类型的变量N,用于存储从输入字符串中提取出的所有整数
vector<int> N;
cin >> str; //使用cin从控制台读取输入的字符串,并存储到str变量中
//遍历输入字符串str的每个字符,循环变量i从0开始,每次循环增加1,直到i小于字符串的长度
for (i = 0; i < str.length(); i++)
{
// 调用isN函数判断当前字符str[i]是否为数字字符
if (isN(str[i]))
{
start = i; //如果当前字符是数字字符,将当前位置i记录为连续数字字符序列的起始位置
//用while循环继续往后遍历字符串,只要当前字符仍然是数字字符且未超出字符串的长度,就继续循环,目的是记录完整的数字字符串
while (isN(str[i]) && i <字符串的长度)
i++;
//通过substr函数从字符串str中提取出从起始位置start开始,长度为i - start的子字符串
//这个子字符串就是一个完整的数字字符串
string numberStr = str.substr(start, i - start);
//使用stoi函数将提取出的数字字符串numberStr转换为整数,并存储到number变量中
number = stoi(numberStr);
//将转换后的整数添加到vector<int>类型的变量N中
N.push_back(number);
}
}
//输出vector<int>类型的变量N中存储的整数的个数,即题干中的整数个数
cout << N.size() << "\n";
//遍历vector<int>类型的变量N,输出其中存储的所有整数,每个整数之间用一个空格隔开
for (i = 0; i < N.size(); i++)
cout << N[i] << " ";
cout << "\n"; //输出一个换行符,使输出结果更加清晰
return 0;
}
// 函数定义,用于判断一个字符是否为数字字符
// 参数:
// - c:要判断的字符
// 返回值:
// 如果字符c是数字字符(即'0'到'9'之间的字符),则返回true;否则返回false
bool isN(char c)
{
return c >= '0' && c <= '9';
}
其中vector详细的用法介绍传送门→
标签:字符,变量,个数,整数,vector,str,字符串 From: https://blog.csdn.net/2401_86982397/article/details/144007656