如何删除句子中的字符串?

时间:2019-11-05 08:22:06

标签: c arrays

我有一项家庭作业,要求我删除句子中的所有随机单词。例如,当我键入:"Hello asjdasjdas my asdjasidj name kasdjas is asjdoaisd Felix sadads"时,输出将删除随机单词,它将为"Hello my name is Felix"。我尝试使用if检测字符串,但是我不知道如何将其转换为2d数组,以便删除字符串。

    int testcase;
    char kalimat[100];
    scanf("%d",&testcase);

    for(int i = 0; i < testcase; i++){
        scanf("%d",&length);
        scanf("%[^\n]",kalimat);

        for(int j = 0; j < length;j++){
            if(kalimat[j-1] == ' ' || kalimat[j+1] == ' ' ){
                // How to remove the string?
            }
        }

    }   

2 个答案:

答案 0 :(得分:0)

如果要将其转换为2d数组,可以这样操作:

#include <stdio.h>

int main(void) {
  char sentence[]="Hello World";
  char arr[2][20];
  int i,j,word;
  for(i=0,j=0,word=0;sentence[i]!='\0';i++){
    if(sentence[i]!=' ') {
      arr[word][j]=sentence[i];
      j++;
    }
    else{
      arr[word][j]='\0';
      word++; j=0;
    }
  }
  arr[word][j]='\0';
  printf("%s\n%s",arr[0],arr[1]);
  return 0;
}

答案 1 :(得分:0)

使用strtok可以标记字符串(字符数组)。请注意:字符串已更改,请使用副本! 您可以尝试这样的事情:

char string[] = "Hasta-la-vista-baby";
char delimiter[] = "-";
char *ptr = NULL;
bool bRandomWord = false;

//first token
ptr = strtok(string, delimiter);

while(ptr != NULL)
{
    printf("Found: %s\n", ptr);
    bRandomWord = Check(ptr); // you'll have to implement this
    if (!bRandomWord)
    {
        // you can copy ptr here to a char[][] using strcpy(_n)
    }
    // next tokens
    ptr = strtok(NULL, delimiter);
}