我正在尝试从用户获取一个字符串输入,然后只反转以元音开头的单词。然后重新打印更改的字符串。我使用了strtok()函数将单词与字符串分开。但是反转单词,似乎是一个问题....我已经编写了这个程序的代码,但它有运行时错误。所以,如果有人能帮我纠正我的代码或为我提供解决方案,它将非常有用。 / p>
这是我的代码:
#include <stdio.h>
#include <string.h>
void reverse(char *tok);
int length(char *t);
int main()
{
char sen[50];
const char s[2] = " ";
int i;
printf("Enter a Sentence: ");
gets(sen);
char *token;
token = strtok(sen, s);
printf("Output: ");
while (token != 0)
{
char z[20] =
{ *token };
for (i = 0;; i++)
{
if (z[i] == ' ')
{
z[i] = '\0';
break;
}
}
if (z[0] == 'a' || z[0] == 'A' || z[0] == 'e' || z[0] == 'E' || z[0] == 'i'
|| z[0] == 'I' || z[0] == 'o' || z[0] == 'O' || z[0] == 'u'
|| z[0] == 'U')
{
reverse(token);
}
else
printf("%s ", *token);
token = strtok(NULL, s);
}
printf("\n");
return 0;
}
//function for reversing the particular parts of string
void reverse(char *tok)
{
char x[20] =
{ *tok };
int i, j, len;
char temp;
for (i = 0;; i++)
{
if (x[i] == ' ')
{
x[i] = '\0';
break;
}
}
len = length(tok);
j = len - 1;
for (i = 0; x[i] != len / 2; i++)
{
temp = x[i];
x[i] = x[j];
x[j] = temp;
j--;
}
printf("%s", x);
printf(" ");
}
//function for determining the length of the token string
int length(char *t)
{
int i = 0;
char y[20] =
{ *t };
for (;; i++)
{
if (y[i] == ' ')
{
y[i] = '\0';
break;
}
}
while (y[i] == '\0')
{
i++;
}
return i;
}
答案 0 :(得分:2)
这一行
printf("%s ", *token);
传递char
,其中0
- 终止char[]
。{/ p>
吸取的教训是:始终编译并发出所有警告!(gcc为-Wall -Wextra -pedantic
)
答案 1 :(得分:1)
问题出在这一行:
if(z[i]==' ')
您已使用令牌' '
拆分,这意味着' '
中没有z[]
。所以循环永远不会结束。
答案 2 :(得分:0)
#include <stdio.h>
#include <string.h>
void reverse(char *tok);
int length(char *t);
int main(){
char sen[50];
const char s[2] = " ";
printf("Enter a Sentence: ");
scanf("%49[^\n]", sen);//gets(sen); //"gets" : Obsolete !
char *token = strtok(sen, s);
printf("Output: ");
while (token != NULL){
char z = *token;
if (z == 'A' || z == 'E' || z == 'I' || z == 'O' || z == 'U' ||
z == 'a' || z == 'e' || z == 'i' || z == 'o' || z == 'u'){
reverse(token);//print by this function
} else {
printf("%s ", token);
}
token = strtok(NULL, s);
}
printf("\n");
return 0;
}
void reverse(char *tok){//original not change
int i, len = length(tok);
char x[len + 1];
for (i = 0; i<len; ++i){
x[i] = tok[len-i-1];
}
x[i]='\0';
printf("%s ", x);
}
int length(char *t){//use strlen
int i;
for(i=0;*t;++i, ++t)
;
return i;
}