我正在编写一个程序,它接受用户输入的字符,例如A和用户输入的数字,例如7.该程序检查字符的有效性,如果为true,则直到它到达此循环内部为止。一个功能。我在函数内部使用ascii decimal。这个循环需要检查isalpha,如果它运行了{}中的代码,它就是这样做的。其他方式不按我想要的方式工作,我不知道如何纠正它。我需要else(不是alpha)将1添加回循环中的计数器并将ascii增加1.如果我这样运行它,它会发出重试/忽略/中止错误。如果我在没有num ++的情况下运行它;它在循环结束后运行和停止。所以,如果你输入一个Z并选择3,它将通过循环运行3次并输出一个Z.有关如何解决此问题的任何想法?
我需要它输出如下内容:输入:Z输入:4它应输出:Z A B C到屏幕。它需要忽略其他ascii非alpha字符。
由于
string buildSeries(char A, int num)
{
//builds the output with the info the
//user inputted
stringstream str1;
string outted;
int DeC=(int)A, i = 0;
//loop builds the output
for(i=0;i<num;i++)
{
if (isalpha(DeC))
{
//converts the decimal to a letter
str1<<(char)DeC;
//adds a space
str1<<" ";
//increases the decimal
DeC++;
}
else
{
num++;
DeC++;
}
}
//builds the sstream and puts it in
//variable "outted"
outted = str1.str();
return outted;
}
答案 0 :(得分:1)
如果您需要在Z处循环回“A”,请将DeC++
更改为
if DecC == 'Z'
DecC = 'A'
else
DecC++;
或者你可以使用模数运算符
修改的
我认为问题可能是这个stringstream insertion operator,&gt;&gt;,没有处理char的重载。它将char转换为short或int然后插入它。请尝试使用string::append(size_t size, char c)。那应该处理插入一个字符。
这会取代您使用str1<<(char)DeC;
调用outted.append(1, (char)DeC)
并删除您对字符串流的使用
答案 1 :(得分:0)
什么是DeC?短语“ascii list”让我怀疑它是一个'C'字符串,在这种情况下你在指针上调用isAlpha()而不是字符串中的值。
编辑:例如,如果您有
char DeC[40];
// read in a string form somewhere
// DeC is a pointer to some memory it has a value of a 32 or 64bit number
if ( isAlpha(DeC) {
// what you might have meant is
if ( isAlpha(*DeC) { // the character value at the current position in DeC