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<
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)");
}