为什么我的代码只能正常运行一次?

时间:2015-09-25 17:12:03

标签: c++ string

大家好日子,

我必须制作一个假设要执行以下操作的程序:

1)要求用户输入字符串。

2)要求用户输入一个整数(让我们称之为' n')。

3)用字符前面的字符替换字符串中的每个字符“' n'在字母表中。

4)将新字符串打印到控制台。

例如: 如果string = abc AND integer = 1,则结果为bcd。

如果string = Hello AND integer = 4,结果将是Lipps。

如果string = Welcome-2-C ++ AND integer = 13,结果将是Jrypbzr-2-P ++(特殊字符,如$,+,/保持不变)。

我已经编写了一些正常运行的代码:

(code removed)

除了它只能工作一次。这就是控制台的样子:

Please insert a string to convert: 
abc
Please enter the modification integer: 
2
The resulting string is: cde
Please insert a string to convert: 
abc
Please enter the modification integer: 
2
The resulting string is: 
Please insert a string to convert: 

正如您所看到的,第二次程序运行时,没有结果。

为什么我的程序在第一次运行时才能正常工作?

P.S。我已经做了一些自己的调试,似乎" for循环"在程序第二次运行时跳过。 (?)

编辑:我认为这可能与内存分配有关吗?

1 个答案:

答案 0 :(得分:4)

您没有初始化循环变量:

for (int i; i < input_string.length(); i++) {

应为int i = 0;

此外,您的ConvertString也可以大规模简化:

string ConvertString(string input_string, int mod_int) {
    for (char& c : input_string) {
        if (std::isupper(c)) {
            c = 'A' + (c - 'A' + mod_int) % 26;
        }
        else if (std::islower(c)) {
            c = 'a' + (c - 'a' + mod_int) % 26;
        }
    }
    return input_string;
}