Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我如何编写一个程序来乘法字符串?_C++ - Fatal编程技术网

C++ 我如何编写一个程序来乘法字符串?

C++ 我如何编写一个程序来乘法字符串?,c++,C++,我必须为一个场景编写一个程序 字符和介于 单词和介于[]之间的数字 句子和介于() 最后要打印那些很多次。 示例: 样本:1 Input: A<4> Output: A A A A 样本:3 Input: A is good. (2) Output: A is good. A is good. 这是我的代码: #include <iostream> using namespace std; int main() { char a[1000]; cout<

我必须为一个场景编写一个程序

  • 字符和介于
  • 单词和介于[]之间的数字
  • 句子和介于()

    最后要打印那些很多次。 示例:

  • 样本:1

     Input: A<4>
     Output: A A A A
    
    样本:3

     Input: A is good. (2)
     Output: A is good. A is good.
    
    这是我的代码:

    #include <iostream>
    using namespace std;
    int main() 
    {
    char a[1000];
    cout<< "Enter a char, word or sentece:" << endl;
    gets(a);
    int i;
    for(i=0;a[i];i++);
    int n=i, k , l=0, m=0;
    while(1){
        for(k=l;a[k]!='<'&&a[k]!='('&&a[k]!='[';k++);
        m=k;
        int o=int (a[m+1])-48;
        int u=0;
        for(i=1;i<=o;i++)
        for(u=l;u<m;u++)
        {
        cout<<a[u];
        }
        if(m+2==n-1)
        return 0;
        l=m+3;
    }
    }
    
    #包括
    使用名称空间std;
    int main()
    {
    字符a[1000];
    库特
    它只适用于1-9个数字

    您正在提取行中的数字

    int o=int (a[m+1])-48;
    
    我们用它作为最后的数字

    您需要存储数字,如果发现更多数字,则继续添加

  • 在循环之前声明
    o
    ,并初始化它
    0
  • 在循环中不断添加
  • 将打印环移出外环
  • //初始化o
    INTO=0;
    而(1){
    对于(k=l;a[k]!='&&a[k]!='')和&a[k]!='];k++)
    {
    o=10*o+a[k]-'0';
    }
    如果(m+2==n-1)
    返回0;
    l=m+3;
    }
    //印刷品
    
    对于(i=1;i,我在代码中发现了两个主要错误

    错误#01:

    #include <iostream>
    using namespace std;
    int main()
    {
        char a[1000];
        cout << "Enter a char, word or sentece:" << endl;
        gets(a);
        int i;
        for (i = 0; a[i]; i++);
        int n = i, k, l = 0, m = 0;
        while (1)
        {
            for (k = l; a[k] != '<'&&a[k] != '('&&a[k] != '['; k++);
            m = k;
            int o = int(a[m + 1]) - '0';
            int terminate = 2;
            for (int j = m + 2; a[j] != '>'&&a[j] != ')'&&a[j] != ']'; j++)
            {
                o = o * 10 + (a[j]) - '0';
                terminate++;
            }
            int u = 0;
            for (i = 1; i <= o; i++)
            for (u = l; u<m; u++)
            {
                cout << a[u];
            }
            if (m + terminate == n - 1)
                return 0;
            l = m + 3;
        }
    }
    
    它只适用于0-9个数字

    原因:


    如果您真的想用“C++方式”执行此操作,您只需在
    之后检查一个数字,使用
    std::string
    ,,这就是您真正需要的

    首先,我们知道要查找什么符号来开始和结束数字序列:

    const char* symbolStart = "(<[";
    const char* symbolEnd = ")>]";
    
    std::string test = "A<4>";  // for example
    
    startPos
    将指向与
    symbolStart
    中的任何字符匹配的第一个字符。接下来,我们找到终止字符的位置:

    endPos = test.find_first_of(symbolEnd, startPos);
    
    现在我们有了
    startPos
    endPos
    ,我们知道数字在哪里。我们需要做的就是获取这个字符串并将其转换为整数:

    std::string num = test.substr(startPos+1, endPos - startPos - 1);
    value = atoi(num.c_str());
    
    我们现在有了数字,现在需要做的就是将出现在
    startPos
    前面的字符串重复写入多次:

        text = test.substr(0, startPos);
        for (int i = 0; i < value; ++i)
            std::cout << text << " ";
    


    < P>注意,我们假设输入是有效的。在示例代码中没有错误检查。为什么不使用<代码> STD::String < /C> >和<代码> FixFixStII/<代码>?这会减少代码的一半以上。我是C++的新手,我不知道如何使用FIFION的。@ PulcMcKeZeYouy基本上写了代码>代码>代码>代码。没有C++。它不工作。对于1-9个数字打印任何东西,对于较大的程序,将崩溃。@ MR.TAJ,在关键位置添加<代码> CUT//CUT>语句,打印重要变量,并查看逻辑错误在哪里。这并不太难。
    endPos = test.find_first_of(symbolEnd, startPos);
    
    std::string num = test.substr(startPos+1, endPos - startPos - 1);
    value = atoi(num.c_str());
    
        text = test.substr(0, startPos);
        for (int i = 0; i < value; ++i)
            std::cout << text << " ";
    
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    void repeater(const std::string& test)
    {
        const char* symbolStart = "(<[";
        const char* symbolEnd = ")>]";
    
        // get start and end of number 
        size_t startPos = test.find_first_of(symbolStart);
        size_t endPos = test.find_first_of(symbolEnd, startPos + 1);
    
        // extract the number 
        string num = test.substr(startPos + 1, endPos - startPos - 1);
    
        // get the value
        int value = atoi(num.c_str());
        string text = test.substr(0, startPos);
    
        // output repeated text
        for (int i = 0; i < value; ++i)
            cout << text << " ";
        cout  << "\n";        
    }
    
    int main()
    {
        repeater("A<50>");
        repeater("good[3]") ;
        repeater("A is good. (2)");
    }