| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2776 人关注过本帖
标题:字符串逆向输出问题
只看楼主 加入收藏
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:4 
字符串逆向输出问题
如题  例如输入字符串“what a nice day” 则输出“day nice a what” 字符串多行从文件读取 但我输出的却是“day nice a hat” 调试发现第一个字符‘w’未赋值进数组   应该是read(char s[N][M],int* i)中while(in.get()!=EOF)那句先把第一个字符‘w’get了   然后再调用getline()就没有了第一个字符   可怎么解决这个问题呢?
程序代码:
#include<iostream>
#include<algorithm>
#include<fstream>
using namespace std;
const int N=10;
const int M=100;
void reversestring(char* s){
    int len=0;
        while(s[len]!='\0'){
            len++;
    }
    int k=len;
    for(int i=len;i>=0;i--){
        if(s[i]==' '){
            for(int j=i+1;j<=k;j++){
                cout<<s[j];
            }
            cout<<" ";
            k=i;
        }
        if(i==0){
            for(int j=0;j<k;j++){
                cout<<s[j];
            }
        }
    }
}
void read(char s[N][M],int* i){
    ifstream in("string.txt");
    if (!in)
    {
        cerr<<"error:can not open file:input.txt"<<endl;
        return ;
    }
    *i=0;

    while(in.get()!=EOF){
        in.getline(s[*i],M);
        (*i)++;
    }
//    for(int j=0;(s[*i][j]=in.get())!=EOF;j++){
//        if(s[*i][j]=='\n'){
//            (*i)++;
//            j=0;
////            cout<<endl;
//        }
////        else{
//////            cout<<s[*i][j];
////        }
//    }
}

int main(){

    char s[N][M];
    int num=0;
    read(s,&num);
    for(int i=0;i<num;i++){
        reversestring(s[i]);
        cout<<endl;
    }

    system("pause");
    return 0;
}
搜索更多相关主题的帖子: 字符串 
2013-10-24 20:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:10 
很多东西没交代清楚,比如 a    b c 是输出成 c b a 还是 c b    a,抑或是输入保证不出现两个空格?

因此,写个demo给你参考一下吧
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iterator>
using namespace std;

int main()
{
    string line;
    getline( cin, line );

    istringstream is(line);
    vector<string> words = vector<string>( istream_iterator<string>(is), istream_iterator<string>() );
    for( vector<string>::const_reverse_iterator itor=words.rbegin(); itor!=words.rend()-1; ++itor )
        cout << *itor << " ";
    cout << words.front() << endl;

    return 0;
}

2013-10-25 12:42
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
收藏
得分:0 
回复 2楼 rjsp
我如果要从文件读取多行呢 不确定多少行  那最开始总要有个xxx.get()!=EOF 吧  但这样再去调用XXX.getline() 好像这一行的第一个字符就获取不到了   我调试程序就是发现这个问题的
2013-10-25 13:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:0 
开始总要有个xxx.get()!=EOF
----- 我跟你说,你这种用法是错误的,EOF这个状态是读过但无数据可读,也就是说即使 非EOF,也不表示文件还有数据可读

程序代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <iterator>
using namespace std;

int main()
{
    ifstream in("string.txt");
    for( string line; getline(in,line); )
    {
        istringstream is(line);
        vector<string> words = vector<string>( istream_iterator<string>(is), istream_iterator<string>() );
        if( words.empty() ) // 防止文件中有空行
        {
            cout << '\n';
            continue;
        }

        for( vector<string>::const_reverse_iterator itor=words.rbegin(); itor!=words.rend()-1; ++itor )
            cout << *itor << " ";
        cout << words.front() << '\n';
    }
    cout << flush;

    return 0;
}

2013-10-25 14:27
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
收藏
得分:0 
回复 4楼 rjsp
受教了
2013-10-25 15:13
快速回复:字符串逆向输出问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018454 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved