我曾尝试计算字符串中的数字,但它不起作用,我认为它在逻辑上很好。我是编程的初学者。 我知道它适用于一位数字,但这是故意的。
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int main()
{
int numbs [10] = {0,1,2,3,4,5,6,7,8,9};
string str1;
cin >> str1;
vector <unsigned int> positions;
for (int a = 0 ;a <=10;a++)
{
int f = numbs[a];
string b = to_string(f);
unsigned pos = str1.find(b,0);
while(pos !=string::npos)
{
positions.push_back(pos);
pos = str1.find(b,pos+1);
break;
}
}
cout << "The count of numbers:" << positions.size() <<endl;
return 0;
}
答案 0 :(得分:1)
如果只需要计算字符串中的数字,那么使用std :: vector是没有意义的。没有矢量你可以统计它们。例如
#include <iostream>
#include <string>
int main()
{
std::string s( "A12B345C789" );
size_t count = 0;
for ( std::string::size_type pos = 0;
( pos = s.find_first_of( "0123456789", pos ) ) != std::string::npos;
++pos )
{
++count;
}
std::cout << "The count of numbers: " << count << std::endl;
return 0;
}
输出
The count of numbers: 8
您还可以使用标头std::count_if
<algorithm>
例如
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
int main()
{
std::string s( "A12B345C789" );
size_t count = std::count_if( s.begin(), s.end(),
[]( char c ) { return std::isdigit( c ); } );
std::cout << "The count of numbers: " << count << std::endl;
return 0;
}
输出
The count of numbers: 8
如果您需要计算字符串中的数字而不是数字,那么您应该使用标准C函数strtol
或C ++函数std::stoi
答案 1 :(得分:0)
使用子字符串以分隔符(通常是空格)提取字符串的每个部分。然后将每个子字符串转换为数字。符合条件和转换的那些可能是你的字符串中的数字。看看你得到了多少。
答案 2 :(得分:0)
您可能也对C ++函数“isdigit”感兴趣:
例如:
include <iostream>
#include <string.h>
#include <vector>
#include <locale> // std::locale, std::isdigit
using namespace std;
int main()
{
// Initialze array with count for each digit, 0 .. 9
int counts[10] = {0, 0, 0, 0, 0, 0, 0,0, 0, 0 };
int total = 0;
// Read input string
string str;
cin >> str;
// Parse each character in the string.
std::locale loc;
for (int i=0; i < str.length(); i++) {
if isdigit (str[i], loc) {
int idx = (int)str[i];
counts[idx]++
total++;
}
// Print results
cout << "The #/digits found in << str << " is:" << total << endl;
// If you wanted, you could also print the total for each digit ...
return 0;
}