如果字符不相等则很简单

时间:2017-10-05 03:00:20

标签: c character-encoding

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); } 不等于一个数字..然后返回。我也试图摆脱无限循环。

3 个答案:

答案 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所说,你需要保证你会退出循环。