visual.ts
我怎么说,void encode(char* dst, const char* src) {
while (1) {
char ch = *src;
if (!ch || ch != '0','1','2','3') { //pseudo-code
*dst = 0;
return;
}
size_t count = 1;
while (*(++src) == ch)
++count;
*(dst++) = ch;
dst += sprintf(dst, "%zu", count);
}
不等于一个数字..然后返回。我也试图摆脱无限循环。
答案 0 :(得分:2)
试试这个:
#include <ctype.h>
void encode(char* dst, const char* src) {
while (1) {
char ch = *src;
if (!isdigit(ch)) { //Should works
*dst = 0;
return;
}
// Rest of the method
}
isdigit(int)
如果字符是整数,则返回true
(&#39; 1&#39;,&#39; 2&#39;,...,&#39; 9&# 39;)或false
在另一种情况下。
(我认为无限循环是故意完成的)
答案 1 :(得分:1)
这是我为你做的一些代码,它会解析所有src
字符串,并告诉字符串是否为数字。你while(1)
可能遇到的问题是无限循环,而你只是在寻找第一个问题,所以如果我将2toto
作为参数传递它会说好,这是一个数字。
如果src为数字,则此函数返回true,否则返回false。
#include <stdbool.h>
bool encode(char* dst, const char* src) {
int i = 0;
char ch;
while (src[i] != '\0')
{
ch = src[i];
if (!isdigit(ch)) { //pseudo-code
*dst = 0;
return false;
}
i++;
}
return true;
}
答案 2 :(得分:0)
isdigit有效,但为了完成,这就是你如何开始为char范围编写自己的检查:
void encode(char* dst, const char* src) {
while (1) {
char ch = *src;
// the char numeric value minus the
// numeric value of the character '0'
// should be greater than or equal to
// zero if the char is a digit,
// and it should also be less than or
// equal to 9
if (!ch || (ch - '0' >= 0 && ch - '0' <= 9)) {
*dst = 0;
return;
}
// ...
}
}
正如Nicolas所说,你需要保证你会退出循环。