首页 > 解决方案 > 我用 C++ 编写了一个程序,通过空格键将单词从一行中分离出来,并将这些单词显示为一个数组。我的代码有什么问题?

问题描述

请帮我找出这个程序中的一个错误。它用空格键将一行分隔成单词。并显示为列表。如果单词的第一个字符为小写,则将其转换为大写。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    char line[30]="Hi there buddy",List[10][20];
    unsigned int i=0,List_pos=0,no;
    int first=0,last;

    while(i!=sizeof(line)+1)
    {
        if(line[i]==' ' or i==sizeof(line))
        {
            last=i;
            no=0;
            for(int j=first;j<last;++j)
            {
                if(no==0)
                    List[List_pos][no]=toupper(line[j]);
                else
                    List[List_pos][no]=line[j];
                ++no;
            }
            ++List_pos;
            first=last+1;
        }
    ++i;
    }

    for(unsigned int a=0;a<List_pos;++a)
        cout<<"\nList["<<a+1<<"]="<<List[a];

    return 0;
}

预期输出:

List[1]=Hi    
List[2]=There    
List[3]=Buddy    

实际输出:

List[1]=Hi    
List[2]=ThereiXŚm    
List[3]=Buddy   

标签: c++algorithmcodeblocks

解决方案


我建议你使用一个字符串,因为你已经包含了它。在这种情况下,'List 并不是真正必要的。尝试制作一个 for 循环,将行分隔成单词,在我看来,当您使用数组时,您应该使用 for 循环。在你的 for 循环中,当你遍历该行时,你可以添加一个 if 语句来确定你是否在一个单词的末尾。我认为您的代码中的问题是多个循环,但我不确定。

我为您提供了一个有效的代码。只需使其适应您的显示要求,您就可以了

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string line = "Hi there buddy";

    for (int i = 0; i < line.size(); i++) {
        if (line[i] == ' ') {
            line[i + 1] = toupper(line[i+1]);
            cout<<'\n';
        } else {
            cout<<line[i];
        }

    }

    return 0;
} ```

推荐阅读