如何在c++中从字符串数组中提取整数
How to extract integers from array of strings in C++
给定一个形式为
的数组char* timePeriod= {"6AM#8AM","11AM#1PM","7AM#3PM","7AM#10AM","10AM#12PM"};
如何提取以下形式的整数数组中的开始和结束时间:
start_time={6,11,7,7,10}
end_time={8,1,3,10,12}
您可以使用"sscanf"来完成此操作。别忘了把它标记为有用的:)
#include <stdio.h>
int main()
{
int a,b,i;
int start_time[5], end_time[5];
char *t[5] = {"6AM#8AM","11AM#1PM","7AM#3PM","7AM#10AM","10AM#12PM"};
char *(*ptr)[5] = &t;
for(i=0;i<5;i++)
{
sscanf((*ptr)[i], "%d%*[AP]M#%d%*[AP]M", &a, &b);
start_time[i]=a;
end_time[i]=b;
}
printf("Starting time : ");
for(i=0;i<5;i++)
{
printf("%d ",start_time[i]);
}
printf("nEnding time : ");
for(i=0;i<5;i++)
{
printf("%d ",end_time[i]);
}
return 0;
}
OUTPUT:
Starting time : 6 11 7 7 10
Ending time : 8 1 3 10 12
一个非常简单的方法是使用strtok
在#上分割字符串,然后在每个片段上使用atoi
。当它看到非数值时,它将停止。
sscanf
是能够做到这一点,虽然我不认为这是一个很好的方式。详情请看这里
#include <stdio.h>
int main() {
const char* t = "6PM#8AM";
int a, b;
sscanf(t, "%d%*[AP]M#%d%*[AP]M", &a, &b);
printf("%d %dn", a, b);
return 0;
}
或者你可以在c++ 11中使用regex
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
string t("6PM#8AM");
smatch match;
regex re("([[:digit:]])+[AP]M#([[:digit:]])+[AP]M");
if (regex_match(t, match, re)) {
cout << match[1].str() << " " << match[2].str() << 'n';
}
return 0;
}
注意:下面的解决方案对您的数据集做了一些非常具体的假设(如果不是这种情况,您可能更喜欢使用正则表达式)。
- 字符串总是以整数开头
- 结束时间将始终在字符串的第4或第5索引
- 0不是有效时间
#include <iostream>
#include <string>
int main() {
std::string timePeriod[5] = {"6AM#8AM","11AM#1PM","7AM#3PM","7AM#10AM","10AM#12PM"};
int startTimes[5] = {0,0,0,0,0};
int endTimes[5] = {0,0,0,0,0};
for(int i=0;i<5;i++) {
std::string s = timePeriod[i];
startTimes[i] = atoi(s.c_str()); // Convert first number to integer
endTimes[i] = atoi(s.substr(4).c_str()); // Convert 2nd numbers to integer
if(endTimes[i] == 0) // If zero
endTimes[i] = atoi(s.substr(5).c_str()); // Get the 5th index instead
std::cout << "Start: " << startTimes[i] << "t End: " << endTimes[i] << std::endl;
}
}
缺少前导零使它有点棘手,但最终-它可以使用子字符串快速解决(假设您不介意将char*更改为std::string)。
相关文章:
- 从指向结构数组的指针中提取元素
- 在C++如何从数组中提取成员并返回成员类型的数组?
- 如何从字符数组C++中提取2个整数并将它们存储在2个变量中(初学者)
- C 仅使用指针从多维数组中提取特定列
- 将文本文件数据读入字符数组时提取运算符的歧义
- 如何在 c++ 中提取 2D 数组的列?
- 从数组中提取一对数字
- 从自定义结构数组中提取数据
- 需要根据读取的数据类型将ifstream提取到单独的数组中
- 将 __m128i?布尔数组中每个布尔字节的低位提取到打包的位图
- 无法从结构数组 C++ 中提取数据
- 如何从对象数组中提取属性数组?
- 将字符数组的一部分提取为 char*
- 使用C 从定界线拆分字符串中提取整数数组
- 如何将提取的字符串数据转换为字符数组
- QRegExp提取数组名称和索引
- C++ - 从整数数组中插入和提取字符
- 从数组中提取元音,并在另一个数组中存储ND打印
- 如何在不使用堆栈或数组的情况下从INT中提取每个数字?(C )
- 将元素范围从字符数组提取到字符串中