1

我正在寻找一个简单的解决方案来从字符串中删除数字。示例:“GA1UXT4D9EE1”=>“GAUXTDEE”

字符串中数字的出现是不稳定的,因此我不能依赖诸如 scanf() 之类的函数。

我是 C 编程新手。感谢您的帮助。

4

5 回答 5

3

我会给你一些提示:

  • 您需要创建一个新字符串。
  • 迭代原始字符串。
  • 检查当前字符是否在数字的 ascii 值之间
  • 如果没有,请将其添加到新字符串中。
于 2013-07-09T20:27:28.423 回答
1

遍历字符串并检查 ascii 值。

for(i = 0; i < strlen(str); i++)
{
  if(str[i] >= 48 && str[i] <= 57)
  {
    // do something
  }
}
于 2013-07-09T20:27:07.493 回答
1
char stringToStrip[128];
char stripped[128];
strcpy(stringToStrip,"GA1UXT4D9EE1");

const int stringLen = strlen(stringToStrip);
int j = 0;
char currentChar;

for( int i = 0; i < stringLen; ++i ) {
    currentChar = stringToStrip[i];
    if ((currentChar < '0') || (currentChar > '9')) {
        stripped[j++] = currentChar;
    }
}

stripped[j] = '\0';
于 2013-07-09T20:30:13.920 回答
0

我同意走过去是一种简单的方法,但也有一个更简单的功能来做到这一点。您可以使用 isdigit()。C++ 文档有一个很棒的例子。(别担心,这也适用于 c。)

http://www.cplusplus.com/reference/cctype/isdigit/

于 2013-07-09T20:31:53.603 回答
0

这是执行此操作的代码。

int i;
int strLength = strlen(OriginalString);
int resultPosCtr = 0;

char *result = malloc(sizeof(char) * strLength);//Allocates room for string. 

for(i = 0; i < strLength; i++){
    if(!isdigit(OriginalString[i])){
         result[resultPosCtr] = OriginalString[i];
         resultPosCtr++;
    }
}
result[resultPosCtr++] = '\0'; //This line adds the sentinel value A.K.A the NULL Value that marks the end of a c style string.

每个人都说得对。

  1. 创建一个新的 char[] AKA C 样式字符串。
  2. 遍历原始字符串
  3. 检查该迭代中的字符是否为数字
  4. 如果不添加到新字符串
于 2013-07-09T20:58:15.823 回答