English 中文(简体)
删除 ansi C 字符串的空间
原标题:Delete space from string in ansi C

我试图在 ansi C 的字符串中写入简单的功能修剪空间 。

我的功用h:

#include <string.h>

const char* trim_str(char *input_str); 

我的st_utels. c:

const char* trim_str(char* input_str){
    char* str = NULL;
    int len = strlen(input_str);
    int i = 0;
    for (i = 0; i < len - 1; i++){
        if (input_str[i] ==    )
            ;
        else
            str += input_str[i];
    }
    return str;
}

当我试图执行它时,我得到了一个折叠:

int main(int argc, char** argv) {
    const char* a = trim_str("Hey this is string");
    printf("%s", a);
    return 0;
}

为什么是错的?我怎么写得正确?

谢谢

最佳回答

您无法修改字符串字典。 它为 UB。 复制字符串并修改其内容。 更改

char* str = NULL;
int len = strlen(input_str);

size_t len = strlen( input_str );
char *str = malloc( len + 1 );

and then proceed 至 copy out the non-whitespace contents.

问题回答

字符串没有分配, 而且您不能使用 {} 来附加字符串。 阅读 strncat 。

通过这里。 这将删除输入字符串两端的空白空格和制表符 。

const char* trim_str(char* input_str){
    char* str = NULL;
    int len = strlen(input_str);
    str = (char *)malloc(len+1);
    int i = 0;
    while(i < len && (input_str[i]==    || input_str[i]== 	 )){
        ++i;
    }
    int j = 0;
    while(i< len && input_str[i]!=    && input_str[i]!= 	 ){
      str[j]= input_str[i];
      ++j;
      ++i;
    }
   str[j] =   ;

   return str;
  }

first of all you need to get the new string size without spaces: You don t want to allocate big strings if you don t have to.

   const char* trim_str(char* input_str){
        char* str = NULL;
        int len = strlen(input_str);
        int i = 0;
        int newSize = 0; 
        for (i = 0; i < len - 1; i++){
            if (input_str[i] ==    )
                ;
            else
                newSize++;
        }
        str = malloc( newSize+ 1 );
        str[newSize] =   

        // put the code of the copy bytes here...

        return str;
    }
char *trimdupstr(char *str)
{
size_t len, src,dst;
char *new;

if (!str) return NULL;
len = strlen (str);
new = malloc(len+1);
if (!new) return NULL;

for(src=dst=0; new[dst] = str[src++];   ) {
        if (new[dst] !=    ) dst++;
        }
return new;
}

此选项卡还可以删除标签和 CR/ LF s :

char *trimdupstr(char *str)
{
size_t len, src,dst;
char *new;

if (!str) return NULL;
len = strlen (str);
new = malloc(len+1);

for (src=dst=0; str[src]; dst += len) {
        len = strspn(str+src, "	 
" );
        src += len;
        len = strcspn(str+src, "	 
" );
        memcpy (new+dst, str+src, len);
        src += len;
        }
new[dst] = 0;
return new;
}

这是一个相当安全的方法。

void rtrim(char instrng[]) {
assert (instrng != NULL);
if (strlen(instrng) == 0) {
    return;
}
while (instrng[strlen(instrng)-1] ==  
  || instrng[strlen(instrng)-1] ==     ) {
    instrng[strlen(instrng)-1] =   ;
}
return; 
}




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签