【发布时间】:2015-04-10 19:15:46
【问题描述】:
我必须向用户询问一个句子和一个字符。然后,我必须找到该句子中具有该字符的每个单词并打印这些单词。我不能使用 strtok() 这是我到目前为止所拥有的。它几乎可以工作,但无法正确打印单词。有人可以帮忙吗?对不起,我是 C 的新手。。
#include <stdio.h>
#include <string.h>
int main()
{
char character;
char sentence[] = "this is my first sentence";
char *strPtr;
char word;
//printf("Enter a sentence\n");
//fgets(sentence, 500, stdin);
printf("Enter a character\n");
scanf("%c", &character);
printf("Words containing %c are: \n", character);
strPtr = sentence;
while(*strPtr != '\0')
{
if (*strPtr == character)
{
printf("%s\n", strPtr);
}
strPtr++;
}
return 0;
}
【问题讨论】:
-
您需要记住找到的前一个空格字符的索引,并等待找到下一个(或字符串结尾),然后再提取包含所需字符的单词。想想如果您选择字母
e会发生什么。sentence这个词只能打印一个。 -
是的,使用两个指针
sp(起始指针)和strPtr。在每个空格的开头和之后将sp设置为每个单词的开头。当strPtr命中下一个空格时,设置null-terminator并打印包含您的字符的单词。 -
我不知道我将如何编码......在while循环中,我检查strPtr何时等于一个空格,然后我将该单词开头的值存储为sp。以及如何打印这个词?
-
注意:代码不能改变文字,因为文字将在内存中标记为“只读”的页面上。因此我会合并两个指针的建议,但一次输出一个字符,直到遇到空格。更新两个指向下一个非空格字符的指针。在循环中执行所有操作,直到遇到 NUL 字符
-
@user3629249 不是这样:
sentence[]是从文字初始化的。如果声明是char *sentence = "this is my first sentence";,您的评论将是正确的。
标签: c string pointers character