修剪一串Int

时间:2010-10-07 03:21:15

标签: c string integer

在我的程序中,我想输入一个整数字符串,例如2107900000.我想得到它的长度,然后想要删除所有的0和1。

3 个答案:

答案 0 :(得分:2)

假设你想要构造一个新的字符串,我假设你想要一个只接受指向这样一个字符串的指针的函数:(假设它stripped所指的是至少相同的大小如orig)指出的那样

void strip_0s_and_1s(char *orig, char *stripped)
{
    // while we haven't seen a null terminator
    while(*orig){
        // if the current character is not a 1 or a 0...
        if(*orig != '0' && *orig != '1'){
           // copy the character
           *stripped= *orig;
           stripped++;
        }
        // increment pointer to old string
        orig++;
    }
    // terminate 'stripped' string
    *stripped= '\0';
}

我认为用两个参数的相同指针调用它应该就地替换...

要解决有关在运行时查找输入字符串长度的问题,您可以执行以下操作:

#include <stdio.h>
#include <string.h>
int main (int argc, char **argv) {
    int len; 
    char str[100]; // max string length of 99+1 null terminator
    scanf("%s", str); 
    len = strlen(str);
    printf("%d", len); 
    return 0; 
}

(编辑:更改为删除使用new作为变量名称)

(编辑:在运行时添加有关输入字符串的信息并查找字符串长度)

答案 1 :(得分:1)

可能不是最佳的,但您可以有条件地将其复制到另一个缓冲区中:

 char buffer[20];
 char num[] = "2107900000";
 int j = 0;
 for (int i = 0; num[i]; i++)
 {
   if (num[i] != '0' && num[i] != '1')
   {
     buffer[j] = num[i];
     j++;
   }
 }
 buffer[j] = 0 //null terminator

或者你可以在一个缓冲区中完成:

 char num[] = "2107900000";
 int j = 0;
 for (int i = 0; num[i]; i++)
 {
   if (num[i] != '0' && num[i] != '1')
   {
     num[j] = num[i];
     j++;
   }
 }
 num[j] = 0 //null terminator

答案 2 :(得分:1)

for (i=j=0; s[i]=s[j]; i+=((unsigned)s[j++]-'0'>2));

好的,因为需要解释,我的想法是用2个索引,目标(i)和源(j)遍历字符串。在每个步骤中,将字符从源索引复制到目标索引,并且由于复制是循环条件,因此如果复制的字符是空终止符,它将终止。在每次迭代时,源索引都会递增(j++),但是如果复制的字符不是0或1,则目标索引只会递增(如果它是这两个字符中的一个,它将被简单地覆盖在下一次迭代)。测试(unsigned)s[j++]-'0'>2使用模运算和数字0-9具有连续值作为字符的属性来执行关于源字符是否在'0''1'范围之外的最佳测试,此真值(分别为0或1表示false或true)被用作增加目标索引的数量。