使用C中的符号拆分字符串

时间:2014-11-11 10:40:15

标签: c string

我写了一个代码试图拆分一个长字符串以获得更简单的字符串,以便我可以将它们排序......当我从嵌套循环中断时,它是否完全分解为第一个循环?

我的输入是"& $(,我,na $ me(是"

我想要的输出是"我的我是" 我怎么解决这个问题?

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

int main(){
    char splitter[100];
    char mystring[1000];
    char newstring[1000][1000];
    int i,j,z,k=0;

    scanf("%s", splitter);
    scanf("%s", mystring);

    for (i=0; i<1000; i++){
        for (j=k; j<1000; j++){
            for (z=0; z<100; z++){
                if (mystring[j]==splitter[z]){
                    k++;
                    break;
                }
                else
                {
                    newstring[i][j]=mystring[j];
                }
            }
            if (mystring[j]==splitter[z])
                break;
        }
    }

    for (i=0; i<10; i++){
        printf("%s ", newstring[i]);
    }

    return 0;
}

4 个答案:

答案 0 :(得分:3)

首先; C不是Python,你不能只使用缩进来表示块,你必须使用大括号,即{}

其次,没有break只打破其中最接近的最多循环,没有办法break超出一个级别。

第三,你循环遍历字符串,好像它们总是100个字符长,而它们并不总是如此(例如在你的例子中它们不是)。这是错误的,您应该使用strlen()来确定它们的持续时间。

第四,您应该检查scanf()来电的返回值,因为它可能会失败。

第五,newstring被声明为一个数组数组,即一个巨大的1兆字节2D“方形”字符,这显然不是你如何使用它。

答案 1 :(得分:1)

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

int main(){
    char splitter[100];
    char mystring[1000];
    char *tokens[500];
    char *token;
    int i=0;

    scanf("%99[^\n]%*c", splitter);
    scanf("%999[^\n]", mystring);

    token = strtok(mystring, splitter);
    while(token){
        if(i)
            putchar(' ');
        printf("%s", token);
        tokens[i++] = token;
        token = strtok(NULL, splitter);
    }
    putchar('\n');

    return 0;
}

答案 2 :(得分:0)

虽然您的代码中存在许多错误,但我无法找出您为什么会犯这些错误。例如,我知道为什么您要扫描两个数组,为什么要使用二维数组。另外一件事我我想告诉你的是,当字符串中有空格时,scanf不起作用。根据你的问题,这里是非常简单的解决方案。

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

int main(){
char splitter[100];
char mystring[1000];
char newstring[1000][1000];
int i,j,z,k=0;

gets(splitter);

for(i=0;i<strlen(splitter);++i){
      if(((splitter[i])>=65 &&(splitter[i]<=90)) || ((splitter[i]>=97)&&(splitter[i]    <=122)))
        mystring[k++]=splitter[i];
else
    mystring[k++]=' ';
 }
 printf("%s\n",mystring);
  //scanf("%s", mystring);


 return 0;
}

答案 3 :(得分:0)

检查以下代码:

int main()
{
   int i=0,j=0,t,f=0;
   char s[20];
   char b[20];
   printf("Enter the string\n");
   scanf("%s",&s);
   while(s[i] != '\0')
   {   
      t = s[i]; 
      if((t>=65 && t<=90) || (t>= 97 && t<=122))
      {
         b[j++] = s[i];
         f = 1;
      }
      else
      {
         if(f)
         b[j++] = ' ';
      }
      i++;
   }   
   b[j] = '\0';
   printf("%s\n",b);
   return 0;
}