我有这个任务:
从键盘上输入一个句子序列到字符串数组中(输入结束-空字符串)。确定每个句子的最后一个单词。
问题是我的程序输出的是最后一个句子的最后一个单词,而我需要输出每个句子的最后一个单词。
我尝试过的程序:
#include <stdio.h>
#include <string.h>
int main() {
char str[10][100];
int i;
printf("Enter a sequence of sentences:\n");
for (i = 0; i < 10; i++) {
if (*gets(str) == '\0')
break;
}
printf("The last word of each of these sentences is:\n");
for (i = 0; i < 10; i++) {
char *word;
word = strtok(str[i], ".");
while (word != NULL) {
char *last_word = word;
word = strtok(NULL, ".");
}
printf("%s\n", last_word);
}
return 0;
}
2条答案
按热度按时间dgtucam11#
此调用中的分隔符
没有任何意义。
看来你是说
假设句子只能以点结束并且单词由空格或制表符分隔。
另一个问题是变量
last_word
必须在while循环之前声明。例如
最好使用for循环而不是while循环
注意,函数
gets
是不安全的,C标准不支持,请改用标准C函数fgets
。第二个for循环中的条件
不正确,因为用户可以输入少于
10
个句子。cczfrluj2#
没有重复评论的接受答案提供的@Vlad(荣誉!),这里是一个替代提供(与评论)
注意:
strcpy()
的重叠缓冲区充满了危险。这在这种情况下是有效的,但是在使用这种技术之前必须充分考虑实践及其影响。