如何让我的程序识别字符串是否包含数字并将其保存到另一个字符串? C ++

时间:2015-01-10 09:34:01

标签: c++ string

我让我的程序识别数字,但现在我想将数字从字符串a保存到字符串c。有任何想法吗?感谢。

#include <iostream>
using namespace std;    
int main()
{
    char a[15] = "235634sdfg123";
    char b[11] = "0123456789";
    char c[15];
    for (int i = 0; i <= 13; i++)
    {
        for (int y = 0; y <= 9; y++)
        {
            if (a[i] == b[y])
            {
                cout << a[i] << "\n";
            }
        }
    }
    return 0;
}

4 个答案:

答案 0 :(得分:2)

#include <cctype>
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>

using namespace std;

int main() {
  auto a = "235634sdfg123"s;
  auto x = std::string{};

  std::copy_if(a.begin(), a.end(), std::back_inserter(x),
               [](auto c) { return std::isdigit(c); });

  cout << x << endl; // 235634123
}

这使用c++14,但如果需要,可以很容易地适应旧C++

这使用std::string代替char[]因为......嗯...因为C++

答案 1 :(得分:1)

你的意思是以下几点吗?

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cctype>

int main() 
{
    char a[15] = "235634sdfg123";
    char c[15];

    *std::copy_if( a, a + std::strlen( a ), c,
                   []( char c )
                   {
                    return std::isdigit( ( unsigned char )c );
                   } ) = '\0';

    std::cout << a << std::endl;
    std::cout << c << std::endl;

    return 0;
}

输出

235634sdfg123
235634123

或者您可以使用普通循环执行相同操作。例如

#include <iostream>
#include <cctype>

int main() 
{
    char a[15] = "235634sdfg123";
    char c[15];

    char *p = a;
    char *q = c;

    do
    {
        if ( std::isdigit( ( unsigned char ) *p ) || *p == '\0' ) *q++ = *p;
    } while ( *p++ );

    std::cout << a << std::endl;
    std::cout << c << std::endl;

    return 0;
}

输出与上面相同

235634sdfg123
235634123

答案 2 :(得分:1)

这个,最简单的解决方案怎么样:

#include <iostream>
using namespace std;
#define ssize 15

int main()
{
    char a[ssize] = "23d1d567d8d9";
    char c[ssize];
    memset(c, 0, ssize);

    int j = 0;
    for (int i = 0; i < ssize; i++)
    {
        if ('0' <= a[i] && a[i] <= '9')
        {
            c[j] = a[i];
            j++;
        }
    }

    cout << a << endl;
    cout << c << endl;
    cin.get();
    cin.ignore();
    return 0;
}

答案 3 :(得分:0)

递增计数器k并使用它来设置char数组c中的数据,如下所示:

#include <iostream>
using namespace std;    
int main()
{
    char a[] = "235634sdfg123";
    char b[] = "0123456789";
    char c[15];
    int k = 0;
    for (int i = 0; i < sizeof(a); i++)
    {
        for (int y = 0; y < sizeof(b); y++)
        {
            if (a[i] == b[y])
            {
                c[k] = a[i];
                k++;
            }
        }
    }
    cout << c;
    return 0;
}