• 5星
5KB m0_53867522 2021-05-25 12:53:29
• 5星
2KB qq_36686437 2021-03-24 13:23:11
• 5星
18KB m0_44995828 2020-12-16 21:46:42
• 5星
11.87MB weixin_44155115 2021-07-04 16:04:05
• 5星
26KB weixin_46080777 2021-04-21 14:03:47
• 5星
580KB weixin_40228600 2021-05-06 14:27:19
• 5星
700KB qq_36686437 2021-09-03 08:34:44
• 5星
861KB trisomydroplets 2021-06-11 17:30:46
• 5星
5.47MB weixin_44793491 2021-04-02 10:39:49
• 5星
55.9MB xipengbozai 2021-04-03 00:01:19
• 现在需要提取字符串数字数字中。代码：#include#include#include#includeusing namespace std;void extractFiguresFromStr2Vec(string str, vector &vec);void extractFiguresFromStr2Vec(stri...

问题描述：
字符串中包含数字和其他非数字的字符如字母，分隔符等。现在需要提取字符串的中的数字到数字中。
代码：
#include
#include
#include
#include
using namespace std;
void extractFiguresFromStr2Vec(string str, vector &vec);
void extractFiguresFromStr2Vec(string str, vector &vec);
void main()
{
string str("- 1.3 fd 2.54j 7.8 qq");
string str1("saf21? fw64,123[]w09\t322\n23 w?fwaet.,<>wet3254 4");
vector vec;
vector vec1;
extractFiguresFromStr2Vec(str, vec);
extractFiguresFromStr2Vec(str1, vec1);
for (int i = 0; i < vec.size(); i++){
cout << vec[i] << "\t";
}
cout << endl;
for (int i = 0; i < vec1.size(); i++){
cout << vec1[i] << "\t";
}
cout << endl;
}
void extractFiguresFromStr2Vec(string str, vector &vec){
const char *s = str.c_str();
const char *pstr;
int i = 0, j = 0;
int k, m;
int e10;
int digit;
int ndigit = 0;
pstr = &s[0];
for (i = 0; *(pstr + i) != '\0'; i++){
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9') || *(pstr + i)=='.')
j++;
else{
if (j > 0){
string str;
for (k = j; k > 1; k--){
str.append(pstr + i - k);
}
vec.push_back(atof(str.c_str()));
ndigit++;
j = 0;
}
}
}
if (j > 0){
string str;
for (k = j; k > 1; k--){
str.append(pstr + i - k);
}
vec.push_back(atof(str.c_str()));
ndigit++;
j = 0;
}
}
void extractFiguresFromStr2Vec(string str, vector &vec){
const char *s = str.c_str();
const char *pstr;
int i = 0, j = 0;
int k, m;
int e10;
int digit;
int ndigit = 0;
pstr = &s[0];
for (i = 0; *(pstr + i) != '\0'; i++){
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
j++;
else{
if (j > 0){
digit = *(pstr + i - 1) - 48;
for (k = 1; k < j; k++){
e10 = 1;
for (m = 1; m <= k; m++)
e10 = e10 * 10;
digit = digit + (*(pstr + i - 1 - k) - 48)*e10;
}
vec.push_back(digit);
ndigit++;
j = 0;
}
}
}
if (j > 0){
digit = *(pstr + i - 1) - 48;
for (k = 1; k < j; k++){
e10 = 1;
for (m = 1; m <= k; m++)
e10 = e10 * 10;
digit = digit + (*(pstr + i - 1 - k) - 48)*e10;
}
vec.push_back(digit);
ndigit++;
j = 0;
}
}
实验截图：

欢迎登陆我的个人主页，hello2019，查看原文：http://richardliu.cn/

展开全文
weixin_29940173 2020-12-29 07:39:43
• ## c++读取字符串和字符的6种函数 c++ c语言 字符串 字符串读取函数

字符串或字符的输入有好多个函数，scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等 如果输入是不带空格的字符串，那用什么都可以了，建议用scanf或cin 如果输入带空格，那scanf、cin就用不了了，...
综述：
字符串或字符的输入有好多个函数，scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等
如果输入是不带空格的字符串，那用什么都可以了，建议用scanf或cin如果输入带空格，那scanf、cin就用不了了，可以考虑以下方法：
如果想用string类型的话，就用getline(cin, s)如果想用字符数组类型的话，可以用**cin.getline()、cin.get()、gets(),**这里不是特别建议用gets()，因为这个函数可能会出点奇怪的问题，也不建议用cin.get(), 因为这个函数既不能忽略缓冲区的换行符，还不能在输入后抹掉自己的结束符，建议使用cin.getline() 如果输入的时候是单个字符，或者只想要字符串的第一个字符，就可以用getchar()、cin.get()
cin和cin.get都会将结束符或换行符留在缓冲区，而除cin外的函数都不能忽略缓冲区的结束符，所以如果用了cin，再用他们的时候记得加上getchar
scanf
scanf用于字符串数组，遇到空格或换行就停止
char str[10];
scanf("%s", str);
cout<<str<<endl;

getline()
可以接受空格，读取时遇到换行符结束
有两种读取方法，法一是string流，法二是iostream流，是两个不一样的函数
方法一：
使用string
string str;
getline(cin, str);
cout<<str<<endl;

方法二：
使用字符串数组
char str[100];
cin.getline(str, 20, '\n')
//cin.getline()里面三个参数，第一个是要储存的字符串数组，第二个是最大长度 + 1，最后一个位置用来存储'\0'，也就是说你填20，但是只能存前19个字符，第三个是结束符，可省略，默认是换行符

注意⚠️
程序的输入都建有一个缓冲区，每次输入的过程，其实是计算机先将输入的数据存在输入缓冲区中，而我们使用的输入函数是直接从缓冲区中读取数据。使用cin的时候，遇到空格和换行符和tab键就会停止，此时缓冲区就会有残留数据：空格、换行符、tab。cin和cin.get()从缓冲区读入的时候会自动忽略第一个空格、换行符、tab，就可以正常读入字符串，但有些函数并不能，比如 getline，gets，get, 他们就会直接读取缓冲区剩余的空格、换行符、tab，就导致需要输入的输不进去。
所以如果你使用getline()或gets()或者cin.get()之前用了cin或cin.get()，请务必在cin后面加个getchar();
//法一
string s, ss;
cin>>s;
getchar();
getline(cin, ss);
cout<<ss<<endl;

//法二
string s;
char ss[20];
cin>>s;
getchar();
cin.getline(ss, 20);
cout<<ss;

get()
读取字符串时用法同getline()的第二种用法
与getline()的区别是cin.get()会将结束符或换行符残留在输入缓冲区中，而getline不会，所以使用get后如果还要用除cin外的输入函数，就得加一个getchar()
char s[100];
cin.get(s, 10);

读取字符时
char c;
c = cin.get();

还可以和getchar一样读走缓冲区中不要的字符
cin.get();

gets()
字符串数组
char s[10];
gets(s);

gets和getline一样，不会将结束符或换行符留在缓冲区，不过如果缓冲区有结束符或换行符，他也会读进去，所以在前面要加个getchar()
char s[10];
gets(s);
cout<<s<<endl;

也可以用于二维字符数组
char s[3][10];
for(int i = 0; i < 3; ++i){
gets(s[i]);
}
for(int i = 0; i < 3; ++i){
cout<<s[i]<<endl;
}

getchar()
getchar()会从缓冲区读走一个字符，如果输入多个字符，也只会读取第一个
char x = getchar();

展开全文
weixin_51216553 2021-08-30 21:19:12
• C++编程，时常会遇到数值和字符串之间的转换，C-Style的atoi，atol，strtod，strtol，strtoul等函数在功能上有时候会略显不足，当然在C++中实现数值和字符串转换的形式各种各样，本文对自己在编程遇到的情况...

在C++编程中，时常会遇到数值和字符串之间的转换，C-Style的atoi，atol，strtod，strtol，strtoul等函数在功能上有时候会略显不足，当然在C++中实现数值和字符串转换的形式各种各样，本文对自己在编程中遇到的情况进行了简单的总结。
1) 数值类型转为字符类型
char str[255];
int num = 100;
sprintf(str, "%d", num);
当然对于各种方式，可以进行任意的扩展和字符的链接。如：
char str[255];
int num = 100;
char postStr[]=".jpg";
sprintf(str, "%d absc %s", num,postStr);
除此，可以根据需要进行扩展。
2)使用stringstream对象进行转换
stringstream ss;
int num = 100;
string str;
ss<
ss>>str;  // 输出 100的字符串
同样，可以任意的对ss进行扩展，如 :
ss<
3)字符串转换为数值
stringstream ss;
int num = 0;
string str(“1000”);
ss<
ss>>num;  // num的值就变成了1000
4)使用CString来格式化数值
CString cstr;
int num = 100;
string str(".jpg");
cstr.format("E:\\images\\%d%s",num,str);

展开全文
weixin_42396760 2021-05-10 15:50:59
• ## UE4 C++中字符串的处理 c++

C++中字符串使用的是String处理的，可以进行截取，大小写转换，逆序等等功能。而UE4为了游戏中字符串的功能不同而封装了3种字符串的类型，分别是FName,FText和FString。 **FName**：在虚幻引擎(UE4)的**内容...
UE4中字符串处理
1.UE4中字符串的分类
C++中的字符串使用的是String处理的，可以进行截取，大小写转换，逆序等等功能。而UE4为了游戏中字符串的功能不同而封装了3种字符串的类型，分别是FName,FText和FString。
FName：在虚幻引擎中(UE4)的内容浏览器（Conten） 中为新资源命名时，变更动态材质实例中的参数或访问骨骼网格体中的一块骨骼时需要使用 FNames。 FName 通过一个轻型系统使用字符串。在此系统中，特定字符串即使会被重复使用，在数据表中也只存储一次。
FName 不区分大小写。它们为不可变，无法被操作。FNames 的存储系统和静态特性决定了通过键进行 FNames 的查找和访问速度较快。 FName 子系统的另一个功能是使用散列表为 FName 转换提供快速字符串。
FNames 不区分大小写，作为索引组合存储在唯一字符串和实例编号的表格中。
（这段话来自 虚幻官方文档-FName)
使用FName
// 创建FName的变量
FName myFName = FName(TEXT("MyName"));

FText: 在虚幻引擎4（UE4）中，文本本地化的主要组件是 FText 类。此类通过提供下列功能支持文本本地化，因此面向用户的所有文本都应使用此类：
1.创建本地化的文本文字。 2.设置文本格式（根据占位符模式生成文本）。 3.根据数字生成文本。 4.根据日期时间生成文本。 5.生成衍生文本，如将文本设为大写或小写。
Ftext 同时具有 AsCultureInvariant 函数（或 INVTEXT 宏），可创建非本地化的（即"语言不变"）文本。这在进行如将玩家名从外部API转换为可在用户界面显示的文本等操作时，十分有用。
可使用 FText::GetEmpty() 或仅使用 FText(),创建空白 FText。
（这段话来 虚幻官方文档-FText)
FString: 与 FName 和 FText 不同，FString 可以与搜索、修改并且与其他字符串比较。不过，这些操作会导致 FString 的开销比不可变字符串类更大。这是因为 FString 对象保存自己的字符数组，而 FName 和 FText 对象保存共享字符数组的指针，并且可以完全根据索引值建立相等性。 （这段话来自 虚幻官方文档-FText)
// 创建FString的变量
FString TestHUDString = FString(TEXT("MyString"));

小结： UE4 C++中的字符串分为3种，FName,FText,FString。 其中，FName用于项目里资源名字，FName不可以修改，在大项目中资源很多，FName便于查找资源名称。FText支持本地化语言，比如外国开发的游戏，想添加中文版本，可以使用FText来实现。FString是可以修改的，开销大。
2.FName,FText和FString的转换
FName、FText转换为FString
	//定义FName,FText,FString
FString myFString = FString(TEXT("HELLO"));
FName myName;
FText myFText;

//FName 转为 FString
myFString = myName.ToString;

//FText 转为 FString
myFString = myFText.ToString;


FString 转换为 FName、FText
	//定义FName,FText,FString
FString myFString = FString(TEXT("HELLO"));
FName myName;
FText myFText;

//FString 转换为 FName
//notice:FString转换为FName后原来的大小写会变成统一的格式，所以有损耗
myName = FName(*myFString);

//FString 转换为 FText
myFText = FText::FromString(myFString);

【注意】FName和FText不能直接转换，需要通过FString来实现转换，相当于FString是二者的沟通桥梁
3.Float、int32、Bool转换为FString
Float类型转换为FString使用的是**SanitizeFloat()**函数，参数填需要转换的float变量。 int32类型转换为FString使用的是FString里面的FromInt()函数，参数填需要转换的Int32/Int变量。 然而Bool转换为FString使用的三目运算符来实现转换的，具体代码如下。
	//float 转换为 FString
float myFloat;
FString::SanitizeFloat(myFloat);

//int32 to FString
int32 myInt;
myFString = FString::FromInt(myInt);

//bool 转换为 FString
//使用三目运算符
bool myBool;
myFString = myBool ? TEXT("True") : TEXT("False");

展开全文
qq_40669895 2021-08-05 20:40:17
• ## 字符串类型中取数字（转整形）（C++） c++ 字符串 算法

qq_51297987 2021-07-01 20:51:49
• dxm809 2021-02-20 06:48:00
• ## c++字符串输入流istringstream c++ 字符串

hacker_zrq 2021-01-17 18:40:28
• liushao1031177 2021-06-13 21:15:57
• ## 提取字符串的数字，并转换为整形的数字进行返回 c语言 简单易懂 指针 字符串 c语言

weixin_54907221 2021-04-07 14:21:42
• ## 字符串中的连续数字取出放入数组中 c语言 c++

qq_46430392 2021-10-02 00:28:51
• weixin_39831239 2021-05-21 06:06:45
• weixin_39695241 2021-05-22 18:50:48
• ## C++中的字符串类 c++

LangLang_2020 2021-11-02 23:53:02
• u014377763 2020-12-29 12:04:12
• weixin_39538607 2020-12-22 11:31:15
• ## LeetCode 394. 字符串解码(C++) 数据结构 c++ 算法 字符串

qq_30457077 2021-01-23 15:29:33
• ## c++ &STL对多行字符串的读取 字符串 c++

walkertc 2021-03-24 14:51:04
• weixin_46571142 2021-11-27 22:43:39
• ## c++的string字符串操作总结 c++ 开发语言 后端

weixin_44163570 2021-12-04 00:18:08
• weixin_36401868 2021-05-25 06:21:45
• ## C++字符串输入缓冲区机制 c++

weixin_45800628 2021-10-27 20:05:25
• weixin_39593523 2020-12-20 14:55:15
• ## 循环: 字符串中提取数字 c++ c#

he5895 2021-10-09 19:19:09
• weixin_29938067 2021-05-19 10:06:53
• ## C++四则运算字符串解析（附动图以及动图制作方法） 字符串 数据结构 c++ 算法

luolaihua2018 2021-04-04 10:57:13
• ## python、c++和java字符串处理比较 python java 字符串 c++

m0_37617773 2021-04-20 17:49:06
• lanuage 2021-01-24 16:58:04
• ## C++知识点复习 ---- C++中的字符串类 c++

Foxproll 2021-03-15 23:27:21
• weixin_42515448 2021-03-05 19:35:15

...

c++ 订阅