我想用字符串/ c ++来计算数字

时间:2014-07-07 20:17:59

标签: c++ string

我曾尝试计算字符串中的数字,但它不起作用,我认为它在逻辑上很好。我是编程的初学者。 我知道它适用于一位数字,但这是故意的。

#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;
 }

3 个答案:

答案 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;
}