从字符串中删除空格,在C中向单词添加单词

时间:2015-11-04 09:20:02

标签: c arrays regex string

我正在尝试从字符串中删除所有空格,并将每个单词添加到字符串数组中。

例如,提供了字符串:

char command[120] = "apple   banana orange  dogfood"

一个数组,定义为:

char *items[20+1]; //Maximum 20 items in string + 0

将包含元素:

{"apple", "banana", "orange" "dogfood"}

也就是说,所有空格都已删除。

我的目标是能够拨打电话:

echo    1    3 2

并打印

1 3 2

而不是

    1    3 2

CODE

到目前为止,我有以下内容:

    char temp_array[120];
    //Populate array with words
    int i, j = 0, ant = 0;
    for(i = 0; i < strlen(command); i++) {
        if(isspace(command[i]) || command[i] == '\0') {
            if(ant <= 20) {
                temp_array[j] = '\0';
                memo = (char *) malloc(sizeof(temp_array)); //allocate memory
                strcpy(memo, temp_array);
                items[ant] = memo;
                memset(temp_array, 0, j);
                ant++;
                j= 0;
            }
        }
        else if(!isspace(command[i])) {
            temp_array[j] = command[i];
            j++;
        }
    }//Done populating array
    items[ant] = NULL;

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:4)

使用LinkedList可以自然解决此问题。

strtok

输出:

#include <stdio.h>
#include <string.h>

int main()
{
    char str[] = "apple   banana orange  dogfood";
    char *items[20] = { NULL };
    char *pch;

    pch = strtok( str," \t\n" );
    int i = 0;
    while( NULL != pch )
    {
        items[i++] = pch;
        pch = strtok( NULL, " \t\n" );
    }

    for( i = 0; i < 20; i++ )
    {
        if( NULL != items[i] )
        {
            printf( "items[%d] = %s\n", i, items[i] );
        }
        else
        {
            break;
        }
    }
    return 0;
}

答案 1 :(得分:0)

遍历每个角色。如果它是一个空格,继续。如果不是,则将该字符的地址添加到数组中,循环直到第一个出现的空格并将其替换为空终止符。重复。

请注意,这会破坏您的初始字符串(在您的情况下为command)。还记得它必须是可修改的(不能是只读字符串)。

答案 2 :(得分:0)

这是一个识别字符串中的单词并将它们存储在数组中的函数。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int GetWords(char *String,char **buffer);

int main(void)
{
    char command[120] = "   apple   banana orange  dogfood";

    char *items[20+1];

    int num_of_words = GetWords(command,items);

    for( int n = 0 ; n < num_of_words ; n++ )
    {
        printf("%s ",items[n]);
        free(items[n]);
    }
    puts("");
    return 0;
}

int GetWords(char *String,char **buffer)
{
    int x = -1 , y = 0 , z = 0 ;

    size_t len = strlen(String) , n ;

    for( n = 0 ; n < len ; n++ )
    {
        y++;

        if( String[n] == ' ' )
        {
            y = 0;
            z = 0;
        }

        if( y == 1 )
        {
            x++;
            buffer[x] = (char*)malloc(len+1);
        }

        if( y > 0 )
        {
            buffer[x][z] = String[n];
            z++;
            buffer[x][z] = '\0';
        }
    }
    //return number of words
    return (x+1);
}

答案 3 :(得分:0)

String Current = "hello java example";
String trimstr=Current.trim().replace(" ", "");

int count=trimstr.length();

String tryarray[]=new String[count];
for(int i =0;i<count;i++){
tryarray[i]=trimstr.substring(i, i+1);
System.out.println(trimstr.substring(i, i+1));
}
System.out.println("arrays is "+Arrays.toString(tryarray));