char inputwords[100];
char *words;
char y='w';
int x=0;
cout<<"Enter word: ";
cin>>inputwords;
words=&inputwords[0];
for(int ctr=0;ctr<100;ctr++)
{
if(*(words+ctr)+1==1||*(words+ctr)+1==-51)
cout<<" ";
else
cout<<char(*(words+ctr)+1);
}
这是代码片段 我的问题是,当我输入“Hello World”时,输出只是“ifmmp”并且它忽略了“World”。帮助:(
答案 0 :(得分:2)
cin
的 >>
只会读取第一个单词,在您的情况下,Hello
只会World
跳过char
。所以要将整个多字词串读入inputwords
数组cin.getline(inputwords, sizeof(inputwords));
使用,
for
100
循环迭代!
次,无论您的输入字符串是什么,这将导致字符串后面的垃圾值。
你需要处理案例,例如,如果两个单词之间有空格,则make put保持不变,而不是将其推进到{{1}}。
答案 1 :(得分:1)
您正在使用C ++进行编码。使用std::string
和STL的算法而不是旧式的C数组和手工制作的循环。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
//encryption function, maths may be wrong.
auto f=[](char &x){x=(x+1)%255;};
//decryption function, maths may be wrong too.
auto g=[](char &x){x=(x-1)%255;};
std::string s;
std::getline(std::cin,s);
std::cout<<s<<std::endl;
std::for_each(std::begin(s),std::end(s),f);
std::cout<<s<<std::endl;
std::for_each(std::begin(s),std::end(s),g);
std::cout<<s<<std::endl;
return 0;
}
编辑:lambda所需的C ++ 11,可以很容易地适用于C ++ 03编译器。
编辑2:在那里看到它 - &gt; http://ideone.com/SjeVaQ
答案 2 :(得分:0)
与原始值进行比较,而不是+1值。不要测试当前+1是否为1,测试当前是否为0。
char *itr = inputwords;
for ( ; *itr; ++itr ) {
char curr = *itr;
}