0

我正在从一个文件中读取,其中包含以下内容:

“连接”、“课程”、“提要”..

我需要将每个字符转换为小写,然后调用一个函数从每个单词中删除后缀。说,首先是连接,然后是课程......

我已完成其余部分,但在读取文件和将单词存储在数组中时遇到问题。

我将在文件中至少有 50 个这样的单词。存储它的最佳方法是什么?

{
    int val=0; char fin_char;    
    string line;string arr[100];    
    ifstream myfile("testfile.txt"); 
    if (myfile.is_open())
    {
        while(myfile.good())
        {
            getline(myfile,line); 
            arr[i]=line; 
            i++;
        }   
        myfile.close(); 
        for (int j=0;j<i;j++)
        {
            while (arr[j][k]!='\0')
            {
                c=arr[j][k];
                cout<<"C"<<c<<" "<<"J:"<<" "<<j<<"K:"<<k<<"\n";
                val=int(c);
                if (val>=65&&val<=90){ val=val+32;fin_char=static_cast<char>(val);arr[j][k]=fin_char;}
                k++;
            }
        }   
        for (int j=0;j<i-1;j++)
        {
            cout<<" "<<arr[j]<<"\n";
        }   
        system("pause");
        return 0;
    }

这是我得到的输出:

 C99 J:0 K:0 C111 J:0 K:1 C110 J:0 K:2 C110 J:0 K:3
4

2 回答 2

1

如果您想要一个随机访问容器(如数组)而不声明它的大小,请使用 STL 中的向量。

于 2013-06-13T19:04:02.587 回答
0

您如何将单词存储在文本文件中?因为除非每个单词都在一个新行中,否则您的arr数组将只有一个带有很长字符串的元素。

同样正如 Bartosz-Marcinkowski 建议的那样,使用向量。您仍然可以访问每个字符,只需将其用作 2D 数组即可。

如果您需要文本文件中的一行中的所有单词,那么我建议根据空格拆分行,如果您愿意,可以使用此功能:

#include "sstream"
#include "vector"
#include "string"

vector<string> split(const string str)
{
 stringstream ss(str);
 string buf;
 vector<string> elems;

 while(ss >> buf)
     elems.push_back(buf);

 return elems;
}

它返回一行中所有单词的向量。所以,你可以像这样使用它:

int main()
{ 
 string line,
 vector<string> arr;
 ifstream myfile("testfile.txt");

 if(myfile.is_open())
     getline(myfile,line);


 arr = split(line);
}

现在,如果您想访问第 5 个单词中的第 3 个字符,您只需要arr[4][2]

于 2016-05-13T04:22:47.750 回答