我写了一个代码试图拆分一个长字符串以获得更简单的字符串,以便我可以将它们排序......当我从嵌套循环中断时,它是否完全分解为第一个循环?
我的输入是"& $(,我,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;
}
答案 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;
}