用句子从单词打印单词
Printing word by word from a sentence
我有一个句子"计算机科学"作为我的输入,我想单独打印计算机和科学。我在C 上写了一个程序,但仅打印"计算机"。谁能帮我找出为什么它不是单独打印两个单词?
int main()
{
char string[]="Computer Science";
int l;
l=strlen(string);
char begin[l];
int i=0,ind=0;
while(string[i]!=' ')
{
begin[ind]=string[i];
if(string[i]==' ')
{
begin[ind]=NULL;
cout<<begin<<"n";
ind=0;
//ind++;
i++;
}
else
{
ind++;
i++;
}
}
return 0;
}
现代C 为处理字符串提供了许多功能。这些功能旨在以更有效的方式简化处理字符串。除非必须使用,否则不要使用C风格的字符串。在您的情况下,您可以做
#include <iostream>
#include <string>
int main()
{
std::string str("Computer Science");
for(int i(0); i < str.size(); ++i){
if( str[i] == ' ' )
std::cout << 'n';
else{
std::cout << str[i];
}
}
std::cout << std::endl;
return 0;
}
使用C ,您可以进行更多的减少,但我会保持原样。
您仅在寻找打印输出的空间。科学在没有空间之后无效。更改为
while(i <= l)
将您的条件更改为
if(string[i]==' ' || string[i] == ' ')
变量长度阵列(VLA(不是C 的标准功能。此外,无需声明一个数组来输出由空格分开的单词。
您的程序在字符串之后没有空格的情况下永远不会在字符串中输出第二个(或最后一个单词(。
和该程序在单词中包含领先空间,因为当单词之间有多个空间时,它不会跳过空格。
该程序可以在说明性程序中显示以下方式。
#include <iostream>
int main()
{
char s[] = "Computer Science";
for ( const char *p = s; *p != ' '; )
{
while ( *p == ' ' || *p == 't' ) ++p;
if ( *p )
{
size_t i = 0;
while ( *p and not ( *p == ' ' || *p == 't' ) )
{
++i;
++p;
}
std::cout.write( p - i, i ) << std::endl;
}
}
return 0;
}
程序输出是
Computer
Science
条件
*p == ' ' || *p == 't'
您可以使用lambda表达式。例如
auto is_blank = []( char c ) { return c == ' ' || c == 't'; }
然后在循环中您可以写
while ( is_blank( *p ) ) ++p;
和
while ( *p and not is_blank( *p ) )
或者您可以使用标准C函数isspace
在标题<cstring>
中声明来检查条件。
可以使用标准算法和迭代器完成任务。例如
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
int main()
{
char s[] = "Computer Science";
std::istringstream is( s );
std::copy( std::istream_iterator<std::string>( is ),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>( std::cout, "n") );
return 0;
}
程序输出与上面的
相同Computer
Science
相关文章:
- 按单词搜索文件,然后在C++中打印特定行数
- 如何打印 BFS 路径本身而不是此单词梯的路径长度?
- 用最少的元音打印单词
- 延迟逐个字符打印单词
- 我的控制台正在打印随机单词以及没有执行正确的数学运算
- 如何在 STL 中使用reverse_iterator打印单词
- 如果该行包含特定单词 (C++),请打印该行
- 用句子从单词打印单词
- 打印所有可能有 4 个字母的单词的时间太多
- 打印出使用地图实现的Trie中的所有单词
- 如何在带有给定特定前缀的向量中打印出单词
- 使用Trie打印所有字典的单词
- (C++) 打印字符数组字符串的单词时出现问题
- 动态分配的数组C 读取句子并打印单词
- 如何将消息发送到缓冲区并反向打印前三个单词的消息
- 打印以 "a" 开头的单词(字符串中)
- 打印由用户定义的数组,第一个数字确定单词的大小,第二个数字确定行的大小
- 如何在单词中打印元音
- 从结构上打印单词
- 如何从.txt文件复制单词到数组.然后将每个单词打印在单独的一行上